是什么与while循环的两种方式有所不同" php mysql_fetch_array"?

时间:2015-12-14 07:08:07

标签: php

当我执行以下操作时:

 while($row = mysql_fetch_array(mysql_query($query))){}

循环时它是不定式的。 但这个不是:

 $query = mysql_query($query);
 while($row = mysql_fetch_array($query)){}

他们之间有什么区别? PHP如何执行?

4 个答案:

答案 0 :(得分:1)

让我们假设您有一个包含以下数据的表student

id  name
1   JD
2   Dev
3   Pallavi

现在,如果你的$query = "SELECT * FROM student"

案例:1

while($row = mysql_fetch_array(mysql_query($query))) { ... }

对于第一次迭代,执行将是

  1. 的mysql_query($查询)
  2. mysql_fetch_array(get_array_obtined_from_first_step)
  3. 将当前行分配给$ row
  4. 在第一步中,您将获得学生表的所有3条记录。然后在第3步中获取记录集,将行分配给$ row。

    现在,当你的3个语句处于while循环的状态时,它将始终为TRUE,因为它将在每次循环迭代时执行查询,执行所有语句,使其成为无限循环。

    案例:2

    $query = mysql_query($query); while($row = mysql_fetch_array($query)){}

    此处查询执行 ONCE ,然后每次光标递增时将一行分配给$ row直到结果集结束。

    因此,当达到结果集的结尾时,它会停止。

答案 1 :(得分:0)

在第一个中,PHP在每次循环进入新迭代时执行查询,因此光标(每次迭代结果时指向前进行的指针)不会在结果数组中向前移动。每次都会得到一大堆相同的结果,并且每次从查询刚执行以来都从头开始。

在第二个查询中,您的查询只执行一次,然后PHP在整个结果数组上进行迭代,同时光标向前移动而不是在每次迭代时重置为零。那个可能就是你需要的。

答案 2 :(得分:0)

让我们来看看

while($row = mysql_fetch_array(mysql_query($query))){}

在此,sql查询执行在while loop,意味着它本身就是递归,因此每次$row获取新数据意味着while loop不会在任何地方结束。

 $query = mysql_query($query);
 while($row = mysql_fetch_array($query)){}

在这种情况下,您在query之前执行while loop。现在,您在$query变量中有一组特定的结果。 $query有一些限制,如0或最大记录。因此loop将在某个时刻停止执行。

答案 3 :(得分:0)

WHILE循环的工作原理:

您需要了解while循环何时停止迭代。 while循环看起来像这样:

while (expression) {
    statement
}
  

在开始时,它将首先计算表达式,如果它返回TRUE(或等同于TRUE),则它将执行{...}块内的语句,否则,它不会执行任何东西。完成该部分的执行后,它将再次评估表达式。如果它再次返回TRUE,它将再次执行脚本,否则,它将在此处停止。此循环将继续,直到表达式返回FALSE

两个表达式之间的差异:

现在看看你的表达式块

mysql_fetch_array(mysql_query($query))

它将始终返回TRUE,因为每次都运行mysql_query和mysql_query返回结果,并且mysql_fetch_array始终能够获取第一行,这允许循环每次执行语句块。这就是它变成无限循环的方式。

$row = mysql_fetch_array($query)

在这里,您之前(仅一次)运行查询,并在您通过结果获取的while表达式中运行。每次拨打mysql_fetch_array()时,您都会获得第一行,第二行等等。当您完成提取结果集中的最后一行时,mysql_fetch_array()将返回FALSE,这将停止while循环的迭代。

推荐读物:

  1. http://php.net/manual/en/control-structures.while.php
  2. http://php.net/manual/en/function.mysql-fetch-array.php
  3. http://php.net/manual/en/function.mysql-query.php
  4.   

    注意:尽快考虑切换到mysqli_query() / mysqli_fetch_array()。 PHP 7将不支持旧函数。