如何正确使用 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("<p>" + data.id + "</p>");
之前,但我只得到了一个undefined
变量。
@nipponese ,尝试在回调中执行 console.dir(data);
(假设您已经在 JS 端解析了 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?的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 js 发送到 php、php 到 mysql 以及 REST json 响应时所需的正确编码/转义/htmlentities 是啥
kendoui parameterMap 解码 php 对象的正确 json 编码是啥?