当我执行以下操作时:
while($row = mysql_fetch_array(mysql_query($query))){}
循环时它是不定式的。 但这个不是:
$query = mysql_query($query);
while($row = mysql_fetch_array($query)){}
他们之间有什么区别? PHP如何执行?
答案 0 :(得分:1)
让我们假设您有一个包含以下数据的表student
id name
1 JD
2 Dev
3 Pallavi
现在,如果你的$query = "SELECT * FROM student"
案例:1
while($row = mysql_fetch_array(mysql_query($query))) { ... }
对于第一次迭代,执行将是
在第一步中,您将获得学生表的所有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
循环的迭代。
推荐读物:
注意:尽快考虑切换到
mysqli_query()
/mysqli_fetch_array()
。 PHP 7将不支持旧函数。