在PHP中访问MySQL表的tutorial中,他们给出了将所有值列为的代码:
$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,但我不明白为什么。
答案 0 :(得分:7)
此:
$row = mysql_fetch_array($result)
while($row){
echo $row['name']. " - ". $row['age'];
echo "<br />";
}
不起作用因为$row
每次执行只会占用一个值,这意味着while循环将永远运行。
来自mysql_fetch_array
doc:
返回与获取的行对应的数组,并向前移动内部数据指针。
在while($row = mysql_fetch_array($result))
版本中,while
的条件表达式将在每个循环中执行,因此将mysql
内部结果指针向前移动(读取下一个结果)。 / p>
答案 1 :(得分:3)
你应该保留这个
while($row = mysql_fetch_array($result)){
因为,在每个循环“转”,$ row获得一个新值。如果在while语句之外设置$ row的值,$ row将重新生成相同的值。
答案 2 :(得分:1)
你需要在while循环中使用 mysql_fetch_array 函数,如:
while(($row = mysql_fetch_array($result)) !== FALSE){
echo $row['name']. " - ". $row['age'];
echo "<br />";
}
如果没有剩余记录,mysql_fetch_array函数将返回 false 。所以循环它直到它返回false。
答案 3 :(得分:1)
看看PHP evaluates expressions如何确定TRUE或FALSE。您将看到它将NULL计算为false。执行时:
$row = mysql_fetch_array($result)
$ row变量要么有一个值,因为你得到了另一行数据,或者它是NULL。如果它有另一行,则循环处理它。否则循环结束。
通过删除赋值,您将获取指定的第一个值,即第一行,然后循环将永远运行,因为$ row永远不会计算为false。
答案 4 :(得分:0)
因为,在第二个例子中,第一个循环结束后,它不执行mysql_fetch_array($ result),而第一个例子在完成每个循环时执行。