使用PHP中的while循环从MySQL表中获取数据

时间:2013-06-01 17:42:50

标签: php mysql

在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,但我不明白为什么。

5 个答案:

答案 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),而第一个例子在完成每个循环时执行。