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ループが1回だけ実行されることです。ここで何が悪いのかわかりません。plsを助けてください。

4

3 に答える 3

5

内側の $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回実行されます。代わりにこれを行うと、1回だけ実行されます。

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

それも衝突しなかっただろう!

于 2012-05-22T11:21:50.677 に答える