JSON编码MySQL结果
问题原因:根据http://www.php.net/mysql_query网页中的描述,mysql_query()函数返回一个资源(resource)。而根据http://www.php.net/json_encode网页中的描述,json_encode函数可以编码任何值,但不能编码资源(resource)类型的值。因此,如果直接将mysql_query()函数的结果传递给json_encode()函数进行编码,会导致编码失败。
解决方法:需要通过循环遍历的方式将数据库查询结果收集到一个数组中,然后再将数组传递给json_encode()函数进行编码。具体地说,需要使用mysql_fetch*系列函数来获取每一行的数据,并将每一行数据存储到一个数组中,然后将该数组传递给json_encode()函数进行编码。
代码示例:
$query = mysql_query("SELECT * FROM table"); $result = array(); while ($row = mysql_fetch_assoc($query)) { $result[] = $row; } $json = json_encode($result);
以上是通过循环遍历的方式将数据库查询结果存储到数组中并进行编码的示例代码。这样就可以解决将MySQL查询结果进行JSON编码时遇到的问题。
问题出现的原因:需要将选定的行放入返回的JSON中的一个独立元素中。
解决方法:首先,像在接受的答案中一样获取$rows
数组,然后将其放入另一个数组中,如下所示:
print json_encode(['object_name' => $rows]);
+1 这似乎是唯一一个以与json.org/example示例相同格式提供JSON的答案。
是的,这个示例为每一行提供一个键。
问题:如何将MySQL查询结果编码为JSON?
原因:使用json_encode函数需要PHP版本大于等于5.2,并且需要安装php-json包。
解决方法1:使用mysqli_fetch_all函数一次性获取数组。
$result = mysqli_query($conn, "SELECT ..."); $rows = mysqli_fetch_all($result); // list arrays with values only in rows // or $rows = mysqli_fetch_all($result, MYSQLI_ASSOC); // assoc arrays in rows print json_encode($rows);
解决方法2:使用json_encode函数的第二个参数JSON_NUMERIC_CHECK,确保将数值类型的整数不被转换为字符串。
$sth = mysqli_query($conn, "SELECT ..."); $rows = array(); while($r = mysqli_fetch_assoc($sth)) { $rows[] = $r; } print json_encode($rows, JSON_NUMERIC_CHECK);