MySQL更新的多个PHP“``”for“``循环


Multiple PHP ```for``` loops for MySQL Update

我需要更新表中的一列,但为了做到这一点,我只需要2个for循环。但问题是,这并没有发生。

而不是得到这样的东西:

UPDATE sample_var set var_id="82" where id=195288
UPDATE sample_var set var_id="83" where id=195289
UPDATE sample_var set var_id="84" where id=195290
UPDATE sample_var set var_id="85" where id=195291

(我只是echo $sql;看看我会得到什么)

我得到这个:

UPDATE sample_var set var_id="82" where id=195288
UPDATE sample_var set var_id="83" where id=195288
UPDATE sample_var set var_id="84" where id=195288
UPDATE sample_var set var_id="85" where id=195288

当我执行以下语句时,数据只是覆盖它自己,使每一个更新的行都保留最后一个值(在本例中,每一行的var_id=85)。

以下是我在这个特殊情况下使用的代码块:

for($i=0;$i<$foo_count;$i++){
    for($a=0;$a<$bar_count;$a++){
       $update_SQL= 'UPDATE sample_var set var_id="'.$bar[$a][0].'" where id='.$foo[$i][0];
          DataBase::ExecuteStatement($update_SQL);
    }    
}

我该如何避免这种问题?

Thx提前:D

应该是这样的:

$bar = array('82','83','84','85');
$foo = array(195288,195289,195290,195291);
$bar_count = count($bar);
for($a=0;$a<$bar_count;$a++){
   $update_SQL= 'UPDATE sample_var set var_id="'.$bar[$a].'" where id='.$foo[$a];
  DataBase::ExecuteStatement($update_SQL);
}  

您正在循环使用$foo_count和$bar_count的每一个可能的组合,这就是您看到所描述的问题的原因。

假设$foo_count == $bar_count,您可以这样做:

for($i=0; $i < $foo_count; $i++){
   $update_SQL= 'UPDATE sample_var set var_id="'. $bar[$a][0] .'" where id='. $foo[$i][0];
   DataBase::ExecuteStatement($update_SQL);
}
for($i=0;$i<$foo_count;$i++){
       $update_SQL= 'UPDATE sample_var set var_id="'.$bar[$i][0].'" where id='.$foo[$i][0];
          DataBase::ExecuteStatement($update_SQL);   
}

一个foreach循环就足够了,因为$foo_count和$bar_count必须根据您的要求相等。

我可能的解决方案。然后插入SQL指令:

$bar = array("82","83","84","85");
$foo = array("195288","195289","195290","195291");
$updateValues = "";
for($i=0;$i<count($bar);$i++){
    $updateValues .= "UPDATE sample_var SET var_id='".$bar[$i]."' WHERE id='".$foo[$i]."';";
}
DataBase::ExecuteStatement($updateValues);