PHP while()无法停止循环

时间:2014-11-27 07:30:53

标签: php

我遇到了问题,因为使用了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 
}

通过该代码,我得到了正确的结果。

我觉得这个实力不大,因为我认为第一个和第二个代码具有相同的功能。 谢谢你的意见或答案!

9 个答案:

答案 0 :(得分:1)

当你在每次获取下一行时使用in时,

mysql_fetch_array()一次取一行。如果要获取任何下一行,则返回true;如果没有,则返回false。

为防止无限循环,请使用以下语法来获取:

while($row = mysql_fetch_array($sql))
{   
    //your code
}
  

注意: original MySQL extension现已弃用,并且在连接到数据库时会生成E_DEPRECATED错误。代替,   使用MySQLiPDO_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已弃用。请尝试使用mysqliPDO

答案 8 :(得分:-4)

试试这段代码:

你的查询中有一个分号..你的分号必须在mysql_query()函数的末尾。这可能是你在while循环中无限循环的原因。

$sql = mysql_query("SELECT saldo FROM stock WHERE id >= '$id' AND idItem = '$idItem'");