MySQL通过PHP更新多行

时间:2014-03-13 16:37:10

标签: php mysql sql

我必须更新表中多行的相同值,我想避免多个mysql_query使用foreach循环扫描数组的每个值。 我试着用一个例子来解释。 这是使用foreach循环解决问题的方法

$array=array(1,2,3);
foreach($array as $val){
$sql = "UPDATE mytable SET val_to_update = XX WHERE id = $val";
mysql_query($sql);
}

我不想用疯狂的查询数量开始锤击数据库,因为数组的元素数量不固定,也可能很大。 我已经考虑过使用SQL语言的IN子句但不知道参数的数量似乎无法找到解决方案。 想到这样的事情,但我不知道它是否可以实现:

$sql= "UPDATE Illustration SET polyptychID = $id_polyptych WHERE illustrationID IN (?,?,?);

然后使用foreach循环绑定所有参数以扫描参数数组。 正如我所说,问题在于我不知道这个数字,所以我不能提供正确的数字?在sql查询中,如果我没有弄错,出现的次数是多少?参数必须与绑定参数相同。 有人解决了这样的问题吗?

1 个答案:

答案 0 :(得分:2)

如果您确定该数组包含整数,为什么不这样做:

$array=array(1,2,3);
if (sizeof($array) > 0 {
  $sql = "UPDATE mytable SET val_to_update = XX WHERE id IN(".implode(',', $array).")";
  mysql_query($sql);
}

如果你想使用预准备语句,你可以使用以下代码创建你的SQL:

$array=array(1,2,3);
    if (sizeof($array) > 0 {
       $placeholders = array();
       for($i=0; $i<sizeof($array); $i++) {
         $placeholders[] = '?';
       }
      $sql = "UPDATE mytable SET val_to_update = XX WHERE id IN(".implode(',', $placeholders).")";
  // .....
}

如果$ array中的值存在于另一个表中,您可以使用以下内容:

$sql = "UPDATE mytable SET val_to_update = XX WHERE id IN (SELECT id FROM another_table WHERE condition = 1)";