php mysqli fetch_assoc 忽略左连接的空值

php mysqli fetch_assoc ignores null values for left join

我有一个问题,不知道为什么我的 mysqli 查询在 PHP.

中不能正常工作

我有两个表:

table 1 "reviews"
id | dateCreated | reviewText | ...

table 2 "issues"
id | reviews_id | issueText | ...

Table 1 条包含来自用户的评论。 Table 2 包含某些评论的问题(投诉)。然而,一篇评论不一定需要有问题(如果没有人报告)。查询是:

SELECT reviews.*, issues.* 
FROM reviews 
LEFT JOIN issues 
    ON reviews.id=issues.reviews_id 
WHERE (reviews.idVenue='6438' OR reviews.idVenue='6444' OR reviews.idVenue='7590' ) 
ORDER BY 'reviews.updated' DESC 

如果存在一个问题需要审核(ON 条款为真),这将非常有效。

但是,如果审查不存在问题(ON 子句不正确),则 reviews.id 和 issues.reviews_id 在使用 [=15= 获取的 $row 中丢失]

if($result = $this -> mysqli -> query($qstr)){
    while($row = $result->fetch_assoc()){
        $temp[] = $row;
        }
}

此外,问题中的所有其他列在 $row 中都丢失了,因为它们是 NULL。缺少我的意思是,如果我在 netbeans 调试器中打印 $row 或将 $row 检查为监视变量,它们将不存在。它只是不显示 reviews.id 和 issues.reviews_id.

如果我 运行 上面的查询直接在 phpmyadmin 中,那么它 return 在没有找到相关问题进行审查的情况下,所有列都正确地使用值 NULL。

所以我的问题是,为什么 PHP 会忽略 NULL 值并且不会 return 它们在 $row 中,而 phpmyadmin 会?

谢谢!

这是我在更多描述性信息中的评论,以防将来有人遇到此问题。

当您调用 fetch_assoc php 时,将列名指定为键,并将它们的值指定为数组的值,因为数组的键是唯一的,任何具有相同 ID 的条目都将是覆盖。

在您的示例中,评论和问题都有一个名为 'id' 的列,因此您将始终从您在 select 语句中使用的最后一个 'id' 列中获取值。

一个简单的解决方法(无需永久更改列名)是在查询中使用别名。 例如:SELECT reviews.*, issues.id as `issue_id`, issues.issueText