【问题标题】:MySQLi PHP -> LEFT JOIN Returns Null when using fetch arrayMySQLi PHP -> LEFT JOIN 在使用 fetch 数组时返回 Null
【发布时间】:2013-11-03 22:09:11
【问题描述】:

我目前正在创建一个 MySQLi PHP 论坛,但我在使用 MySQL LEFT JOIN 时遇到了一些问题,我正在尝试使用 set catid 让所有子论坛“加入”,

在 mysql 工作台中测试时,查询本身运行良好,并且我收到了正确的列表。但是每当我尝试将结果放入数组中时,我都会得到 null

我当前的代码是这样的

$sql = 'SELECT `c`.`id`, `c`.`name`, `sc`.`id_sub`, `sc`.`name_sub`, `sc`.`catid` 
    FROM `forum_categories` AS `c` 
    LEFT JOIN `forum_subcategories` AS `sc` 
    ON `c`.`id` = `sc`.`catid`';
$stmt = $mysqli->query($sql);
$forum_categories = array();
while($row = $stmt->fetch_array(FETCH_ASSOC))
{
   // define forum category
$forum_categories[$row['id']] = array(
    'title' => $row['name'],
);

    // add forums to category
$forum_categories[$row['id']]['forum_subcategories'][] = array(
    'id' => $row['id_sub'],
    'title' => $row['name_sub']
);
}

var_dump ($row->name);

但是 var_dump 只返回 null。

这就是 var_dump($stmt);返回

object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(5) ["lengths"]=> NULL ["num_rows"]=> int(10) ["type"]=> int(0) }

【问题讨论】:

  • 将 var_dump 移到收盘上方 }
  • 为什么要转储 $row->name 而不是类别?
  • var_dump ($stmt);print_r($stmt); 在查询后立即得到结果。不要等到完成所有提取操作后才检查可能为空的最后一行。完成该状态后,在 while 的顶部转储或打印 $row ,以便您可以查看该阶段发生的情况。当您更熟悉 mysqli 功能和属性时,最后“快速检查”会变得更容易,但现在......婴儿步骤。 :)

标签: php mysql sql arrays mysqli


【解决方案1】:

Mysqli 从不干扰您的查询。

如果 fetch_array 返回 null,则结果集中没有剩余行。

【讨论】:

  • 但是在 mysqlworkbench 中运行查询时,我得到了正确的结果?
  • 您正在针对其他数据库运行您的工作台,或者查询不一样。或者您实际上也可以从 mysqli 获得正确的结果,但由于某种原因不要使用它。
【解决方案2】:

这是因为var_dump()while 循环之外。当fetch_array返回falsewhile退出,循环结束时$row的值为false

【讨论】:

  • 为什么-1 ???有些人应该被禁止无故提供-1。或者没有像StackOverflow规则中所说的那样在评论中给出原因。
猜你喜欢
  • 2015-01-30
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多