0

快速提问;

$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 循环迭代。我不知道这里有什么问题。请帮帮我。

4

3 回答 3

5

请将内部 $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;
          }
        }
      }
   }
}
于 2012-05-22T11:02:15.920 回答
1

只是一个观察:

因为你有:

$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){ 

它也不会发生冲突!

于 2012-05-22T11:21:50.677 回答
0

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

于 2019-06-23T12:19:38.247 回答