PDO结果数组不能转换为json

时间:2014-04-09 19:45:14

标签: php pdo json

我在互联网上看过很多例子(特别是这里),下面的解决方案应该能够将数据库查询的结果变成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);

1 个答案:

答案 0 :(得分:2)

  

为什么第一种方法不起作用?

确实如此。只需仔细检查生成的JSON即可 只要您的查询返回任何行,此代码就会生成完美的第一类json。

与其他PHP用户一样,您很可能不会立即检查结果,而是检查远程后果。

如果确实没有,请检查json_last_error()然后在utf8中设置数据库客户端编码