【问题标题】:PHP invalid JSON encodingPHP 无效的 JSON 编码
【发布时间】:2019-07-24 13:55:24
【问题描述】:

当我将特定 ID 发布到我的数据库时,我正在尝试获取 JSON 格式。当我得到多个结果时,我有多个行,我想取回这些行。我确实得到了不同的数组,但它不是有效的 JSON 格式。而不是

[{...},{...},{...}]

它回来了

{...}{...}{...}

因此缺少 [...] 并且数组没有用逗号分隔。

我的代码在下面。函数“getUserBookingsKl”在不同的 php.ini 文件中定义。

//get user bookings
public function getUserBookingsKl($id) {

    //sql command
    $sql = "SELECT * FROM `***` WHERE `hf_id`=$id AND `alloc_to`>DATE(NOW()) AND NOT `confirmation`=0000-00-00 ORDER BY `alloc_from`";

    //assign result we got from $sql to $result var
    $result = $this->conn->query($sql);

    // at least one result
    if ($result !=null && (mysqli_num_rows($result) >= 1 )) 
    {
        while ($row = $result->fetch_array()) 
        {
            $returArray[] = $row;

        }
    }

    return $returArray;
}

...

...

foreach($userdb as $dataset)
    {
        $returnArray["group"] = $dataset["kf_id"];
        $returnArray["from"] = $dataset["alloc_from"];
        $returnArray["to"] = $dataset["alloc_to"];

       echo json_encode($returnArray);
     #   return;
    }

    // Close connection after registration
    $access->disconnect();

【问题讨论】:

  • ”//这里将值推入数组” - 不,你不是。
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db->prepare("…") 程序接口是 PHP 4 时代的产物,当时引入了 mysqli API,理想情况下不应在新代码中使用。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • 你只能用 JSON 做一个输出,所以你实际上发送了多组 JSON 数据而不是 1。作为一般规则,你应该能够在输出之后调用 exit() 而不会破坏你的东西.如果您在循环中调用 exit,那么您的循环将无法完成,因此您必须将该输出移到循环之后。

标签: php mysql arrays json mysqli


【解决方案1】:

看起来您是按顺序发射值,而不是推入数组。你需要创建一个数组,推入其中,然后在结果结构上调用json_encode

$final = [ ];
foreach ($userdb as $dataset)
{
  $returnArray = [ ];
  $returnArray["group"] = $dataset["kf_id"];
  $returnArray["from"] = $dataset["alloc_from"];
  $returnArray["to"] = $dataset["alloc_to"];

  $final[] = $returnArray;
}
echo json_encode($final);

请注意,这里重要的是不要每次都在循环内使用相同的变量,否则您只是多次推送同一个数组。

【讨论】:

    猜你喜欢
    • 2010-12-19
    • 2023-03-20
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2023-03-11
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多