【问题标题】:json_encode in PHP not returning correct resultsPHP中的json_encode没有返回正确的结果
【发布时间】:2025-12-02 04:50:01
【问题描述】:

我正在尝试将数据输入到具有 CRUD 操作(称为 Jquery JTable)的网格中,但是从 MYSQL 表到 JSON 的 Json 转换似乎存在某种错误,以便将数据显示在表上它需要看起来像这样:

{
    "Result":"OK",
    "Records":[
      {"PersonId":1,"Name":"Benjamin Button","Age":17,"RecordDate":"\/Date(1320259705710)\/"},
      {"PersonId":2,"Name":"Douglas Adams","Age":42,"RecordDate":"\/Date(1320259705710)\/"},
      {"PersonId":3,"Name":"Isaac Asimov","Age":26,"RecordDate":"\/Date(1320259705710)\/"},
      {"PersonId":4,"Name":"Thomas More","Age":65,"RecordDate":"\/Date(1320259705710)\/"}
    ]
}

但是每当我在 php 中实现 json_encode 函数时,它都会给我这个:

{
    "Result":"OK",
    "Records":[
        {"0":"1","PersonId":"1","1":"Benjamin Button","Name":"Benjamin Button","2":"17","Age":"17","3":"2011-12-27 00:00:00","RecordDate":"2011-12-27 00:00:00"},
        {"0":"2","PersonId":"2","1":"Douglas Adams","Name":"Douglas Adams","2":"42","Age":"42","3":"2011-12-26 00:00:00","RecordDate":"2011-12-26 00:00:00"},
        {"0":"3","PersonId":"3","1":"Isaac Asimov","Name":"Isaac Asimov","2":"26","Age":"26","3":"2011-12-28 00:00:00","RecordDate":"2011-12-28 00:00:00"},
        {"0":"4","PersonId":"4","1":"Thomas More","Name":"Thomas More","2":"61","Age":"61","3":"2011-12-27 00:00:00","RecordDate":"2011-12-27 00:00:00"},
        {"0":"5","PersonId":"5","1":"Ihsan Oktay Anar","Name":"Ihsan Oktay Anar","2":"44","Age":"44","3":"2012-01-03 20:55:02","RecordDate":"2012-01-03 20:55:02"}
    ]
}

这是我的 PHP 代码:

<?php

//Get records from database
$result = mysqli_query($conn, "SELECT * FROM people;");

//Add all records to an array
$rows = array();
while($row = mysqli_fetch_array($result))
{
    $rows[] = $row;
}

//Return result to jTable
$jTableResult = array();
$jTableResult['Result'] = "OK";
$jTableResult['Records'] = $rows;
print json_encode($jTableResult);

?>

该表名为 people,它有四个字段:personIdNameAgeRecordDate

任何想法将不胜感激。

【问题讨论】:

  • 您正在使用返回索引键的mysqli_fetch_array (0/1/2/etc...),您想使用mysqli_fetch_assoc() 只需将其更改为:mysqli_fetch_array($result, MYSQLI_ASSOC)
  • 如果您只是要将它们作为数组单独存储,那么将结果作为数组循环是没有意义的。你不妨只做$rows = mysqli_fetch_array($result); 并使用$rows;

标签: php mysql json error-handling


【解决方案1】:

您可能想试试mysqli_fetch_assoc() 函数。

因为根据关于mysqli_fetch_array()的PHP文档:

以关联、数字数组或两者的形式获取结果行

这就是您现在使用代码所遇到的情况,因为默认获取模式是MYSQLI_BOTH

... "1":"Benjamin Button","Name":"Benjamin Button" ...

您也可以使用mysqli_fetch_array(),但您必须调整获取模式:

mysqli_fetch_array($result, MYSQLI_ASSOC);

【讨论】:

  • 这看起来也像是一条评论,只是在他们开始对你投反对票之前将其扩展得更分裂。
  • 到目前为止所说的一切。