我遇到了问题,因为使用了while()函数,但今天我解决了五六个小时。我在这里问,因为我不明白它是怎么回事。 这是我的代码
$sql = mysql_query("SELECT saldo from stock where id >= '$id' and idItem = '$idItem';")
如果我尝试:
$row = mysql_fetch_array($sql);
while($row)
{ // my code is here
}
然后,while()无法停止循环。但如果我这样做:
while($row = mysql_fetch_array($sql))
{//my code is here
}
通过该代码,我得到了正确的结果。
我觉得这个实力不大,因为我认为第一个和第二个代码具有相同的功能。 谢谢你的意见或答案!
答案 0 :(得分:1)
mysql_fetch_array()
一次取一行。如果要获取任何下一行,则返回true;如果没有,则返回false。
为防止无限循环,请使用以下语法来获取:
while($row = mysql_fetch_array($sql))
{
//your code
}
注意: original MySQL extension现已弃用,并且在连接到数据库时会生成E_DEPRECATED错误。代替, 使用MySQLi或PDO_MySQL扩展程序
答案 1 :(得分:0)
$row
不受循环的影响,所以它当然会循环。你可能想要这样的东西:
while($row = mysql_fetch_array($sql))
{ // processing code goes here
}
答案 2 :(得分:0)
在您的第一个代码段中,循环条件始终为true
,因为$row
的值永远不会改变,并且您将以无限循环结束。
在第二个片段中,$row
在每次循环迭代时重新分配,一旦它null
(通常在mysql_fetch_array
的情况下在记录集的末尾),循环终止
答案 3 :(得分:0)
因为第一个代码每次使用相同的$ row,所以循环永远不会停止,甚至不会每次迭代获取结果。 但是第二个代码每次都会获取结果,循环按预期工作。
答案 4 :(得分:0)
第二个最终停止的原因是因为每次调用mysql_fetch_array()
都会调用数据库查询中的下一行。一旦调用了所有行,它就会开始返回false,这就是循环的结束。
这可能有点令人困惑,因为你没有看到任何计数器,但计数器实际上隐藏在mysql_fetch_array()
函数中,并最终会终止。
但是如果你把那个调用放在while循环之外,它只调用一次而你继续迭代同一行。
答案 5 :(得分:0)
$row = mysql_fetch_array($sql);
while($row)
{ // my code is here
}
mysql_fetch_array从您的表中获取1行且只有1行进入$ row,因此如果您有一行符合您的查询,则不需要一段时间
如果生成的查询有多行,则需要对mysql_fetch_array做一段时间,如下所示:
while($row=myql_fetch_array($sql){}
现在您可以从表中获取所有行
答案 6 :(得分:0)
第一种情况下$row
的值未更改。您需要在循环中使用另一个赋值再次更新它,因此您的第二个语句更好,因为它可以一次性完成:)
答案 7 :(得分:0)
For -
$row = mysql_fetch_array($sql);
while($row)
{ // my code is here
}
$row
始终为true,因为它包含值,因此循环将无限执行。和
while($row = mysql_fetch_array($sql))
{//my code is here
}
$row
直到mysql_fetch_arrya
有值。
mysql
已弃用。请尝试使用mysqli
或PDO
。
答案 8 :(得分:-4)
试试这段代码:
你的查询中有一个分号..你的分号必须在mysql_query()函数的末尾。这可能是你在while循环中无限循环的原因。
$sql = mysql_query("SELECT saldo FROM stock WHERE id >= '$id' AND idItem = '$idItem'");