while loop的两种方式的区别是什么;php-mysql_fetch_array”;


What make the difference in 2 ways of while loop "php mysql_fetch_array"?

当我执行以下操作时:

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

它是不定式while循环。但这不是:

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

它们之间有什么区别?PHP是如何执行的?

假设您有一个包含以下数据的表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($query)
  2. mysql_fetch_array(get_array_obtined_from_firstrongtep)
  3. 将当前行分配给$row

在第一步中,您将获得学生表的所有3条记录。然后在第三步中获取记录集,将行分配给$row。

现在,由于您的3条语句处于while循环的条件下,它将始终为TRUE,因为它将在每次迭代循环时执行您的查询,执行所有语句,使其成为无限循环。

案例:2

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

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

因此,当结果集结束时,它停止。

让我们寻找

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

在这种情况下,sql查询的执行是在while loop中进行的,这意味着它本身就是递归的,因此每次$row获得新数据时,意味着while loop不会在任何地方结束。

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

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

WHILE循环的工作原理:

您需要了解while循环何时停止迭代。while循环如下所示:

while (expression) {
    statement
}

在开始时,它将首先计算表达式,如果它返回TRUE(或等效于TRUE),则它将执行{...}块内的语句,否则,它将不执行任何内容。在完成该部分的执行之后,它将再次对表达式求值。如果它再次返回TRUE,它将再次执行脚本,否则,它将停止在这里。此循环将持续到表达式返回FALSE为止。

两个表达式之间的差异:

现在看看你的表情块

mysql_fetch_array(mysql_query($query))

它总是会返回TRUE,因为它每次都在运行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

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

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

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