我必须更新表中多行的相同值,我想避免多个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查询中,如果我没有弄错,出现的次数是多少?参数必须与绑定参数相同。 有人解决了这样的问题吗?
答案 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)";