2

自分でロールバックする必要があるのか​​ 、それとも、SQL選択クエリを渡してJSONオブジェクト(または文字列)を返すことができる、見落としている既製のPHP SQLライブラリがあるのか​​ 知りたいです。結果として。

疑似コードで私が欲しいのはこれです:

$startIndex = 0;
$myJSON = magicSqlToJSON("select first_name, last_name, phone,  (select count(id) from users) as total from users limit $startIndex, 2");

$myJSON は現在:

{"users":[
   {"first_name":"Peter", "last_name":"O'Tool","phone":"1234567890","total":"100"},
   {"first_name":"Gary", "last_name":"Shandling","phone":"1234567890","total":"100"}
]}

これを自分で書くのにそれほど時間がかからないことはわかっていますが、これはあまりにも一般的な必要性であり、まだ存在しないだろうと考えました.

4

4 に答える 4

2

PHP にネイティブに存在する単一の関数はありません

mysqli_fetch_array()ただし、 (たとえば) と を組み合わせて使用​​すると、これを非常に迅速に行うことができますjson_encode()。親フォーマットを少し調整する必要があるでしょう (つまり、「users」の下) 。

于 2012-05-24T21:40:06.217 に答える
2

PHP

PHP にはこの目的のための関数json_encode()json_decode()関数がありますが、データを手動でループする必要がありますforeach

MySQL

lib_mysqludf_jsonなどのユーザー定義関数を利用できます。これにより、次のようにクエリから JSON 配列を返すことができます。

select json_array(
           customer_id
       ,   first_name
       ,   last_name
       ,   last_update
       ) as customer
from   customer 
where  customer_id =1;

次の結果が得られます。

+------------------------------------------+
| customer                                 |
+------------------------------------------+
| [1,"MARY","SMITH","2006-02-15 04:57:20"] |
+------------------------------------------+

そのUDFには関数もありjson_object、質問のサンプルに非常に近い表現が得られるはずです。

于 2012-05-24T21:45:21.837 に答える
1

直接機能はありませんが、何か他のことができます:

結果は配列から来ているので、呼び出すだけです

json_encode(配列); -> http://php.net/manual/en/function.json-encode.php

その上で、それだけです

例:

$query = "select first_name, last_name, phone,  (select count(id) from users) as total from users limit $startIndex, 2";
$result = mysql_query($query) or die(mysql_error());

echo json_encode(mysql_fetch_array($result));
于 2012-05-24T21:39:32.057 に答える
0

PDOを使用していると仮定します

echo json_encode($pdo->exec($sql)->fetchAll());

それ以外の場合、一般的なパターンは次のとおりです。

$handle = execute_query($sql);
$rows = array();
while ($row = get_row_assoc($handle)) {
    $rows[] = $row;
}
echo json_encode($rows);
于 2012-05-24T22:16:22.357 に答える