我在互联网上看过很多例子(特别是这里),下面的解决方案应该能够将数据库查询的结果变成JSON:
$stmt = $pdo->query('select * from TABLE;');
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($data);
但在我的情况下,这不会产生任何JSON,尽管查询结果包含75行。稍微不同的方法确实返回JSON:
$stmt = $pdo->query('select * from TABLE;');
echo "[";
while($r = $stmt->fetch()) {
echo json_encode($r);
}
echo "]";
我可以接受,但我想知道发生了什么。为什么第一种方法不起作用?
编辑:
这可能会给人一种线索。下面的代码产生[]作为结果。仍然不是我想要的,但是while语句中的fetch确实是'某事'。
$stmt = $pdo->query('select * from TABLE;');
while($r = $stmt->fetch()) {}
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($data);
答案 0 :(得分:2)
为什么第一种方法不起作用?
确实如此。只需仔细检查生成的JSON即可 只要您的查询返回任何行,此代码就会生成完美的第一类json。
与其他PHP用户一样,您很可能不会立即检查结果,而是检查远程后果。
如果确实没有,请检查json_last_error()然后在utf8中设置数据库客户端编码