2

在使用 PHP 访问 MySQL 表的教程中,他们给出了列出所有值的代码:

$query = "SELECT * FROM example"; 

$result = mysql_query($query) or die(mysql_error());


while($row = mysql_fetch_array($result)){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

我理解当有一行要打印时while循环如何返回true,当没有更多时返回false,但我不明白为什么如果我写它不起作用:

$query = "SELECT * FROM example"; 

$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);

while($row){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

它只返回第一行,我认为这意味着它总是将值返回为 true,但我不明白为什么。

4

5 回答 5

7

这个:

$row = mysql_fetch_array($result)

while($row){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

不起作用,因为$row每次执行只取一个值,这意味着 while 循环将永远运行。

mysql_fetch_array文档:

返回与获取的行对应的数组,并将内部数据指针向前移动。

相反,在该while($row = mysql_fetch_array($result))版本中,while的条件表达式将在每个循环中执行,因此将mysql内部结果指针向前移动(读取下一个结果)。

于 2013-06-01T17:45:16.983 回答
3

你应该保留这个

while($row = mysql_fetch_array($result)){

因为,在每个循环“转”时,$row 都会获得一个新值。如果您在 while 语句之外设置 $row 的值,则 $row 将重新获得相同的值。

于 2013-06-01T17:45:15.610 回答
1

您需要在 while 循环中使用mysql_fetch_array函数,例如:

while(($row = mysql_fetch_array($result)) !== FALSE){
    echo $row['name']. " - ". $row['age'];
    echo "<br />";
}

如果没有剩余记录,则mysql_fetch_array 函数返回false 。所以循环它直到它返回false。

于 2013-06-01T17:47:58.740 回答
1

看看PHP 如何评估表达式以确定 TRUE 或 FALSE。您将看到它将 NULL 评估为 false。当你执行:

 $row = mysql_fetch_array($result)

$row 变量要么有一个值,因为你有另一行数据,要么它是 NULL。如果它有另一行,则循环处理它。否则循环结束。

通过删除分配,您将获取分配的第一个值,即第一行,然后循环永远运行,因为 $row 永远不会评估为假。

于 2013-06-01T17:49:55.687 回答
0

因为,在第二个示例中,一旦第一个循环完成,它就不会执行 mysql_fetch_array($result),而第一个示例会在完成每个循环时执行。

于 2013-06-01T17:46:23.247 回答