首页 > 解决方案 > PHP:将 fetch_assoc() 放入数组中导致空值

问题描述

我正在尝试从 MariaDB 节日和各自位置的数据库中获取数据。运行时:

while($row = $sth->fetch_assoc()){}

并在输出值时迭代 $row ,我得到数据库中的数据。但是,当像这样存储每一行​​时:

while($row = $sth->fetch_assoc()){
    $results[] = $row;
}

并将结果回显为 JSON (echo json_encode($results);) 我得到了这个:

{"id":"0","name":null,"village":"0","startDate":"2019-01-16",
"endDate":"2019-01-23","message":null}

这适用于我不管理的现有 Linux 服务器(我正在使用 CPanel)。PHP 版本为 5.4 和 MariaDB 10.1.37。

到目前为止,Stack Overflow 和其他网站上的很多代码示例都在使用 $results[] = $row; 用于存储结果。经过 3 年的 Swift 编程后,我将返回 PHP ......所以我怀疑这可能是一个简单的问题来解决......

谢谢!

标签: phpjsonmysqlimariadb

解决方案


可能是我回答这个问题有点太晚了,但它可能会帮助有人遇到这个问题。最近我遇到了一个类似的问题,我花了 3 天时间才明​​白这是 utf-8 字符的问题。存储在数据库中的数据非常好。但是当通过 json_encode() 返回它时,它根本不显示任何数据,因为 json_encode 只支持 utf-8 数据( reference )。

对于您的情况,以下方法应该有效-

foreach ($results as &$r) {
    $r['name'] = utf8_encode($r['name']);
    //same for all other items
}

推荐阅读