循环+ mysqli_fetch_object

时间:2018-12-13 13:51:16

标签: mysqli while-loop

下面的代码可以完美地工作,不要试图在其中发现错误(尽管肯定有一些错误)。令我困扰的是,我似乎无法弄清为什么为什么

this.form = new FormGroup({
  test: new FormControl('',{updateOn:'submit'})
})

这是我正在学习的CRUD教程的一部分。 while循环(如您所见)遍历整个表并列出所有行和列。但是从我对WHILE循环的理解来看,这不应该起作用。我的猜测是,它应该尝试无限次打印出当前行并由于条件没有变化而使我的浏览器崩溃。为什么它遍历所有行?为什么停止?我在任何地方都找不到答案。 W3学校或PHP手册及其定义并不能真正帮助我。

会有足够的人用简单的术语来解释吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

每次获取都会获取一行并成功,其结果为true,因此while循环继续进行。如果没有更多行可用于提取,则提取将返回false,而while循环结束。

答案 1 :(得分:1)

您假定情况不变。那就是你错了。您可以在while条件中 inside 重新分配值。

while ($row = mysqli_fetch_object($result))

mysqli_fetch_object的结果在每次迭代时存储在$row变量中。 $row变量将被评估为布尔值,并且如果$row是一个对象,它将是真实的,因此将进入循环体内。

因此,在第一次迭代中,您将获得第一个$row,然后是第二个,依此类推。

如果没有更多行,mysqli_fetch_object将返回nullNull将存储在$row变量中并进行评估。 Null是一个错误的值,因此循环将中断。

您很可能会误以为是其中一种情况:

  • $row == mysqli_fetch_object($result)
  • $row === mysqli_fetch_object($result)

这完全改变了含义。


旁注:条件的重新分配也是php在不同地方允许的,并且可能导致难以调试的错误。

例如if ($bool = false) { echo "I never will be printed";}是有效的php,将始终导致false检查,因此从不执行真实分支。