在 PHP 7.0 中编码多维数组不起作用 (json_encode)

Posted

技术标签:

【中文标题】在 PHP 7.0 中编码多维数组不起作用 (json_encode)【英文标题】:encoding multidimensional array in PHP 7.0 doesn't work (json_encode) 【发布时间】:2018-01-06 04:59:26 【问题描述】:

我在从 mysql phpmyadmin(4.0 版)表中获取 JSON 数据时遇到问题,我尝试过 PDO 和 mysql_connect。

我的想法:mysql--> PHP--> echo json

与我的服务器的连接正常,并且 SQL 语句运行良好。我已经测试过了。但是 JSON 本身的“json_encode”(和其他一些)是不可能的。 json数组没有建好。

PhpMyAdmin 中有需要注意的设置吗?

PDO:

      $query = $pdo->prepare('SELECT p.*, count(r.rate) AS rates, avg(r.rate) AS average from plugins p left join rate r on p.title = r.title group by p.title');
        $query->execute();
        $row = $query->fetchAll();
        // send the data encoded as JSON
        $json = json_encode($row, JSON_UNESCAPED_UNICODE);
echo $json;
       print_r($row);
        exit;

结果是:

Array ( [0] => Array ( [id] => 153 [0] => 153 [title] =>

我哪里错了?我将我的服务器更新到 PHP 7.0,现在代码不起作用。在更新之前一切正常,并且有一个很长的 json 数组(应该如何)

应该怎样

"id":"1","title":"ExmapleTitle"....,"id":"2","title":"ExmapleTitle2"....... 

【问题讨论】:

为什么同时使用mysqli和pdo?选择一个;-) 获取什么?预期结果和当前结果是什么? 在 php7 json_encode 仅适用于 utf8,您的响应中有什么不是吗?否则会失败 代码的哪一部分不起作用? $json_array 和/或 $data 是空的吗?您确定您的查询是正确的并且正在正确执行吗? PDO 和 mysqli 脚本位于我网页的不同文件中(我已经测试了很多可能性)。我想将我的 MYSQL phpmyadmin 数据库转换为 utf8 json。我认为制作这样的json数组存在问题。脚本什么都不做。没有错误或其他 【参考方案1】:

你必须调用execute()

    <?php

    $pdo = new PDO('mysql:host=xxxxx;dbname=xxxxx', 'xxxxxx', 'xxxxxx');

    $statement=$pdo->prepare("SELECT p.*, count(r.rate) AS rates, avg(r.rate) AS average from plugins p left join rate r on p.title = r.title group by p.title");

    $statement->execute(); // <<< --- You are missing this
    $data = $statement->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($data); //Echo: data ... voila

【讨论】:

谢谢。我纠正它。但是我有一个多维数组并且编码不起作用: PHP 用 print_r.... 打印出来 Array ( [0] => Array ( [id] => 153 [0] => 153 [title] => 111 墨刷 [1] => 111 墨刷 [链接] => myphotoshopbrushes.com/brushes/id/3516 [2] => myphotoshopbrushes.com/brushes/id/3516 [数据] => Ink111.abr [3] => Ink111.abr [文本] 我不明白你为什么说编码不起作用。您是说希望以特定方式格式化 JSON? 如果您希望 JSON 以特定方式格式化,则循环遍历数据并按照您的需要进行格式化。也许您应该添加一个示例输出,您希望 JSON 的外观如何。 取决于您希望输出的格式。如果您提供完整的 print_r 输出和您要实现的目标的示例,我可以帮助您实现目标。就目前而言,没有足够的信息来提供全面的答案。 @CSSMaster 您的代码中似乎缺少 PDO::FETCH_ASSOC 方法的 PDO::FETCH_ASSOC 参数。添加它,JSON 应该就是您要查找的内容。

以上是关于在 PHP 7.0 中编码多维数组不起作用 (json_encode)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 javascript 中访问多维 PHP 数组作为 json 编码的变体?

多维动态数组,为啥不起作用?

为啥这个 PHP 递归函数不起作用

javascript创建多维数组语法[重复]

求JS如何读取PHP里的多维数组?

多维数组在第二个循环中找不到索引