1

我已经在这个概念上停留了大约 5 个小时,这真的让我很沮丧。

$result = $mysqli->query("SELECT col FROM table");
while($row = $result->fetch_assoc()){
    echo $row['data'];
}

我知道该函数一次只能获取一行,但我不明白循环重置时它是如何被调用的。它是如何被调用的$row = $result->fetch_assoc?此外,如果$row为空,此条件如何评估为真?

4

5 回答 5

1

好的,这是对您的简单测试,

让一个arraywhich 具有null如下所示的值,

$row = array('value' => null);

现在让我们检查一下使用if条件

if($row)
{
    echo "null is making variable value to true so condition will work.";
}

粘贴coderun我相信您会在if条件内看到消息。

你的情况

您正在使用$result->fetch_assoc(),因为您知道它将返回array可能具有null如上例所示的值。

但正如您所看到的,它会返回true$result因为$result实际上已经分配了值,并且它是true.

所以条件会满足。

于 2013-09-03T05:41:50.583 回答
1

简而言之,while 循环条件正在寻找true

while(true){
//do this
}

因此,直到这个表达式$row = $result->fetch_assoc() 解析为truewhile 循环才会继续。

问题是什么时候它不是真的?当检索到所有行时。

于 2013-09-03T05:46:48.187 回答
0

如果 $row 为空,此条件如何评估为真?

它没有。这才是重点。

于 2013-09-03T06:28:27.803 回答
0

鉴于您的代码:

while($row = $result->fetch_assoc()){
    echo $row['data'];
}

循环条件可以重写为以下等价物:

while (($row = $result->fetch_assoc()) != false) {
    echo $row['data'];
}

也就是说,while$row不是 falsy,它会继续循环;null也被认为是虚假的。

于 2013-09-03T06:36:07.000 回答
-1

以下对您的代码的解释可能会对您有所帮助

// run the query. this returns a mysqli_result object on success.
// on failure query function returns false and you have to handle this condition.
$result = $mysqli->query("SELECT col FROM table");

// fetch_assoc() here you fetch one row at a time from the mysqli_result
// object into $row. this also moves the pointer to the next row
// so the next call returns the next row.
// This returns false when there is no more rows and exit your while loop
while($row = $result->fetch_assoc()){
    echo $row['data'];
}

您可能要参考的链接
http://www.php.net/manual/en/class.mysqli-result.php
http://php.net/manual/en/mysqli-result.fetch-assoc.php

于 2013-09-03T05:48:48.077 回答