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

Posted

技术标签:

【中文标题】如何正确使用 PHP 将 MySQL 对象编码为 JSON?【英文标题】:How do I properly use PHP to encode MySQL object into JSON? 【发布时间】:2012-08-07 05:26:13 【问题描述】:

我正在尝试遍历 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);

?>

或者这个……

<?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) . ", ";
    

?>

【问题讨论】:

【参考方案1】:
$data = array();

while ( $row = $result->fetch_assoc() )
    $data[] = json_encode($row);

echo json_encode( $data );

应该这样做。另外,您可以使用http://jsonlint.com/ 查看您的 JSON 输出有什么问题。

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

$data = $result->fetch_all( MYSQLI_ASSOC );
echo json_encode( $data );

【讨论】:

+1 或者使用fetch_all()。注意:我猜你不需要. ", " @tereško 是的!这是一个很好的方法,但现在我不知道如何处理回调......在我使用$("#diver").append("&lt;p&gt;" + data.id + "&lt;/p&gt;"); 之前,但我只得到了一个undefined 变量。 @nipponese ,尝试在回调中执行 console.dir(data); (假设您已经在 J​​S 端解析了 JSON)。也许参数的名称已经改变。此外,您将返回一个对象数组,而不仅仅是一个对象,它已被编码为 JSON 字符串。现在应该是data[0].id 哦,是的,呃,它现在是一个数组。非常感谢! 嘿!检查你没有编码两次!它将在您的 json 数据中添加反斜杠。我认为它应该看起来像: $data[] = $row;不是 $data[] = json_encode($row);【参考方案2】:

我用这个:

    $json = array();

    if(mysqli_num_rows($result))
        while($row=mysqli_fetch_assoc($result))
                $json[]=$row;
        
    
    mysqli_close($mysqli);
    echo json_encode($json);

?>

我得到这样的东西

[ "id":"2","usuario":"zeldafranco","password":"lol","id":"3","usuario":"franco","password":"franco" ,"id":"4","usuario":"peteko","password":"sanpeteko","id":"5","usuario":"prueba","password":" prueba","id":"6","usuario":"test","password":"test", "id":"7","usuario":"pibe","password":"hola", "id":"8","usuario":"que ase","password":"que ase","id":"9","usuario":"trt","password":" trt", "id":"10","usuario":"tyt","密码":"tyt" ]

【讨论】:

正是我所寻找的,以及根据 JSONLint 的有效 JSON。【参考方案3】:
$arrUsers = array();

$fetch = mysql_query("SELECT * FROM users"); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) 



 $arrUsers['id'] = $row['name'];
    $arrUsers['col1'] = $row['col1'];
    $arrUsers['col2'] = $row['col2'];

    array_push($arrUsers,$row_array);



echo json_encode($arrUsers);

【讨论】:

以上是关于如何正确使用 PHP 将 MySQL 对象编码为 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

将 PHP 数组转换为对象的 JSON 数组

将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥

kendoui parameterMap 解码 php 对象的正确 json 编码是啥?

如何正确运用PHP json

如何:正确使用PHP将数据编码成JSON格式,并通过jquery/ajax请求数据

如何在php中正确的使用json(转)