Php 在循环中更新sql中的多行

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

我有多个与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="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

}