【问题标题】:PHP: fetch_assoc() into array causing null values [duplicate]PHP:fetch_assoc()进入数组导致空值[重复]
【发布时间】:2019-06-08 18:10:50
【问题描述】:

我正在尝试从 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 和其他网站上的很多代码示例都在使用 $结果[] = $行; 用于存储结果。 在只使用 Swift 编程 3 年后,我将返回 PHP ......所以我怀疑这可能是一个简单的问题来解决......

谢谢!

【问题讨论】:

  • 那么实际的问题是什么?该行实际上可能具有这些列的空值。没有看到数据,很难判断。
  • 例如“name”和“message”列中都有字符串......当我遍历$row时,我可以回显输出。当我将每个 $row 存储在 $results 中时,除了 null 之外,我似乎什么也得不到……这很奇怪,因为它只发生在字符串值上。会不会是字符集问题?
  • var_dump($results) 输出是什么,你能提供你正在运行的查询吗?
  • $sth = $mysqli->query("SELECT * FROM Festivals");
  • var_dump 工作,所有数据,包括字符串都在那里......发生了什么?大声笑

标签: php json mysqli mariadb


【解决方案1】:

也许我回答这个问题有点太晚了,但它可能会帮助那些被这个问题困扰的人。最近我遇到了一个类似的问题,我花了 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
}

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2013-01-08
    • 2020-06-23
    • 2019-09-27
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多