为什么"而"循环总是用来迭代mysql_fecth_array()函数的结果?

时间:2015-07-15 19:30:35

标签: php mysql loops while-loop

为什么不让人们使用forforeachdo..while(),为什么省略增量计数器呢?

`<?php  while ( $fa = mysql_fetch_array($sel1) )//uesd mysql_fetch_array() function in while loop
    { 
          echo  $fa['cid'];//display client id 
    }

//虽然w3school中的语法允许使用此

 $x = 1; 

 while($x <= 5) {
     echo "The number is: $x";
     $x++;
 }  
?>//show why we don't used mysql_fecth_array() like this 

2 个答案:

答案 0 :(得分:2)

这是一种过时的信息。在某种程度上,你会问一个社区刚刚接受的问题。我可以更好地了解,而我有信息要显示......做某事。你通常不会说 foreach这些项目......尽管你可以做某事。但是,另一个问题是mysql_fetch_array返回FALSE if there are no more rows。这在foreach中不起作用,因为它不是数组。一个for也会失败,因为要检查a的完成,你必须去某个点并结束.. FALSE不是一个有效的检查点(我曾尝试或使用过)。

@Michael Berkowski补充道:

从PHP 5.4及更高版本开始,mysqli_result类确实具有Iterator支持,这意味着您可以执行$result = mysqli_query(...);,然后执行foreach ($result as $row) {...},它将获取关联数组

虽然这不是最常用的形式,但这就是为什么我们有问题

你可以do...while,但为什么你呢。您没有从获取阵列获得的大部分信息。

虽然被接受并且通常更好。如果mysql以任何方式失败,都不会失败并且有后退。

最后......不要再使用mysql_ *了。切换到mysqli_ *。更安全..更聪明..更好。

答案 1 :(得分:0)

你可以完美地使用任何其他循环来获得查询结果。
人们大多使用while循环的原因是因为它只是最简单的方法。这样做的原因是,如果没有任何额外的代码行,我们就不知道返回了多少行,因此我们不知道有多少次我们必须迭代才能从结果中获取所有行。 br />每次执行mysql_fetch_array()时,它都会为我们提供下一行数据,当它用完行时,它会返回false。所以使用while循环我们基本上说:虽然还有一个新行,但我们从中获取数据,获取下一行,当我们用完行时,我们停止。

例如,您可以使用for循环完成相同的操作。它不是那么简单。

使用for循环迭代mysql_fetch_array():

$r = mysql_query($query);
$num_rows = mysql_num_rows($r);

for($i = 0; $i < $num_rows; $i++) {
    echo mysql_fetch_array()[$id];
}

其他选择是在for循环中放置一个if语句来检查是否有新行,否则,我们可以退出for循环。
使用while循环,我们将循环和if语句结合起来。