Php 在循环中更新sql中的多行
我有多个与id同名的输入字段,其他字段也有类似的名称Php 在循环中更新sql中的多行,php,mysql,foreach,Php,Mysql,Foreach,我有多个与id同名的输入字段,其他字段也有类似的名称 <input name="id[]" value="1" /> <input name="st[]" value="4" /> <input name="id[]" value="5" /> <input name="st[]" value="57" /> <input name="id[]" value="79" /> <input name="st[]" value
<input name="id[]" value="1" /> <input name="st[]" value="4" />
<input name="id[]" value="5" /> <input name="st[]" value="57" />
<input name="id[]" value="79" /> <input name="st[]" value="43" />
.
.
.
然后我从用户peterm那里找到了这个
UPDATE table
SET st = CASE id
WHEN 'id_x' THEN 'st_x'
WHEN 'id_y' THEN 'st_y'
...
ELSE st
END
WHERE id IN('id_x', 'id_y', ...);
我如何在一个循环中从我的网站用户自发地获得它(foreach?)$SizeOfID=sizeof($id);
对于($i=0;$i我希望它可以解决您的问题。您可以使用以下代码:
if(!isset($_POST['id'] || count($_POST['id']) == 0){
return;
}
foreach($_POST['id'] as $key => $id)){
$sql = "UPDATE table SET st='{$_POST['st'][$key]}' WHERE id='{$id}'";
}
还有另一种更快的方法可以实现它,因为循环的缘故,不需要执行多个sql
但是您必须确保查询的构造方式能够“命中”现有的唯一键(例如主键),因此它将使用sql的on-DUPLICATE键来更新其值
例如:
<?php
$values = [];
foreach( $data as $id => $value ){
$values[] = "( '".$id."', '".$value."' )";
}
if( (bool)$values ){
$sql = "INSERT INTO table ( id, st ) VALUES".implode(',',$values)." ON DUPLICATE KEY UPDATE st = VALUES(st)";
//execute $sql here
}
您的代码中的st是什么?最好在php中使用foreach,而不是在mysql中。在执行update语句进行注入之前,不要忘记检查您的数据。st只是一个类似id列的列名。如果我想在php中使用它,我已经准备好了;)您能解释一下您的解决方案吗?
if(!isset($_POST['id'] || count($_POST['id']) == 0){
return;
}
foreach($_POST['id'] as $key => $id)){
$sql = "UPDATE table SET st='{$_POST['st'][$key]}' WHERE id='{$id}'";
}
<?php
$values = [];
foreach( $data as $id => $value ){
$values[] = "( '".$id."', '".$value."' )";
}
if( (bool)$values ){
$sql = "INSERT INTO table ( id, st ) VALUES".implode(',',$values)." ON DUPLICATE KEY UPDATE st = VALUES(st)";
//execute $sql here
}