【问题标题】:PHP while loop iterates only oncePHP while 循环只迭代一次
【发布时间】:2012-05-28 20:33:53
【问题描述】:

快速提问;

$sql = mysql_query("SELECT * FROM cronjobs WHERE status = 0 ");

while($cronjob = mysql_fetch_array($sql)){
    if($cronjob['suid'] != $cronjob['cuid']){
        //echo 'not equal<br>';
        $set = 0;
        $sid = $cronjob['sid'];
        $suid = $cronjob['suid'];
        $cuid = $cronjob['cuid'];
        $set = notify($sid, $suid, $cuid);
        if($set==1){
            //echo 'notified<br>';
            $sql = "UPDATE cronjobs SET status = '1' WHERE id='".$cronjob['id']."'";
            if(mysql_query($sql)){
               echo '1<br>';
              $set = 0;
          }
        }
      }
   }
}

notify()return 1(数字)

问题是即使有更多记录,while 循环也只执行了一次迭代。我不知道这里有什么问题。请帮帮我。

【问题讨论】:

  • 你的 if 条件在 while 循环中是否对多条记录为真?
  • @heyanshukla 可能是。但大多数记录不会。这只是在处理一条记录后停止。
  • 然后首先在while循环中从if条件中回显一些东西。并检查迭代次数。

标签: php loops while-loop iteration


【解决方案1】:

请将内部 $sql 变量名更改为其他名称..外部 $sql 和内部 $sql 正在发生冲突

$sql = mysql_query("SELECT * FROM cronjobs WHERE status = 0 ");

while($cronjob = mysql_fetch_array($sql)){
    if($cronjob['suid'] != $cronjob['cuid']){
        //echo 'not equal<br>';
        $set = 0;
        $sid = $cronjob['sid'];
        $suid = $cronjob['suid'];
        $cuid = $cronjob['cuid'];
        $set = notify($sid, $suid, $cuid);
        if($set==1){
            //echo 'notified<br>';
            $sql_2 = "UPDATE cronjobs SET status = '1' WHERE id='".$cronjob['id']."'";
            if(mysql_query($sql_2)){
               echo '1<br>';
              $set = 0;
          }
        }
      }
   }
}

【讨论】:

    【解决方案2】:

    只是观察:

    因为你有:

    $sql = mysql_query("SELECT * FROM cronjobs WHERE status = 0 ");  
    while($cronjob = mysql_fetch_array($sql)){ 
    

    它会在每一次循环中执行一次查询。如果你有 100 行,它会执行 100 次。如果你改为这样做,那么它只会执行一次。

    $sql = mysql_query("SELECT * FROM cronjobs WHERE status = 0 ");  
    $res = mysql_fetch_array($sql);
    while($cronjob = $res){ 
    

    它也不会发生冲突!

    【讨论】:

    • 它肯定没有通过 ref,先生。
    【解决方案3】:

    当您有相同的查询变量($query)时,这显然是一个问题 和结果对象 ($result)。在 WHILE 循环中尝试不同的 mysql_query() 名称。

    【讨论】:

    • 这与接受的答案相同。