【问题标题】:How do I properly use PHP to encode MySQL object into JSON?如何正确使用 PHP 将 MySQL 对象编码为 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) . ", ";
    }

?>

【问题讨论】:

    标签: php mysql json mysqli


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-18
      • 2012-06-10
      • 2013-08-03
      • 2021-05-05
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多