如何正确使用PHP将MySQL对象编码为JSON?

nip*_*ese 0 php mysql json mysqli

我试图迭代一个MySQL对象并在另一个页面上使用ajax调用来追加数据,但我无法让php将有效的JSON返回给回调.

这显然不起作用......

<?php

    $db_host = "localhost";
    $db_user = "blah";
    $db_pass = "blah";
    $db_name = "chat";
    $mysqli = new MySQLi($db_host, $db_user, $db_pass, $db_name);
    $myQuery = "SELECT * FROM users";
    $result = $mysqli->query($myQuery) or die($mysqli->error);
    $row = $result->fetch_assoc();
    echo json_encode($row);

?>
Run Code Online (Sandbox Code Playgroud)

或者这一个......

<?php

    $db_host = "localhost";
    $db_user = "blah";
    $db_pass = "blah";
    $db_name = "chat";
    $mysqli = new MySQLi($db_host, $db_user, $db_pass, $db_name);
    $myQuery = "SELECT * FROM users";
    $result = $mysqli->query($myQuery) or die($mysqli->error);
    while ( $row = $result->fetch_assoc() ){
        echo json_encode($row) . ", ";
    }

?>
Run Code Online (Sandbox Code Playgroud)

ter*_*ško 9

$data = array();

while ( $row = $result->fetch_assoc() ){
    $data[] = json_encode($row);
}
echo json_encode( $data );
Run Code Online (Sandbox Code Playgroud)

这应该做到这一点.此外,您可以使用http://jsonlint.com/查看JSON输出的问题.

更新:使用fetch_all()也可能是一个好主意

$data = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $data );
Run Code Online (Sandbox Code Playgroud)