【问题标题】:How to update multiple rows in one query (using for loop) [duplicate]如何在一个查询中更新多行(使用 for 循环)
【发布时间】:2016-08-06 20:11:41
【问题描述】:

例如,我的表上有两个数据:

|身份证号   |姓名   |年龄   |


| 1     |史蒂夫   | 25    |
| 2     |鲍勃      | 28    |

当我更新一个值(例如:将“Bob”更改为“George”)时,它会更改所有值。结果如下:
|身份证号   |姓名   |年龄   |


| 1     |乔治   | 28    |
| 2     |乔治   | 28    |

如何在一个查询中更新多行?为了收集值,我使用这样的 for 循环:

<?php
...
$id_array = $_POST['id'];
$name_array = $_POST['name'];
$age_array = $_POST['age'];

$id = array();
$name = array();
$age = array();

for ($i = 0; $i < count($id_array); $i++) {
//count($id_array) --> if I input 4 fields, count($id_array) = 4)

   $id[] = mysql_real_escape_string($id_array[$i]);
   $name[] = mysql_real_escape_string($name_array[$i]);
   $age[] = mysql_real_escape_string($age_array[$i]);                    
}
mysql_query("UPDATE member SET name = '$name', age = '$age' WHERE id = '$id'");
}
...
?>

你能帮帮我吗?谢谢。

【问题讨论】:

  • 你可以用CASE,但是你的例子没有意义,史蒂夫是怎么变成乔治的?
  • 看看print_r($_POST);的结果就好了$_POST['id']真的包含多个id吗?

标签: php mysql for-loop


【解决方案1】:

在循环中构造您的查询:

<?php
...
$id_array = $_POST['id'];
$name_array = $_POST['name'];
$age_array = $_POST['age'];

for ($i = 0; $i < count($id_array); $i++) {
//count($id_array) --> if I input 4 fields, count($id_array) = 4)

   $id = mysql_real_escape_string($id_array[$i]);
   $name = mysql_real_escape_string($name_array[$i]);
   $age = mysql_real_escape_string($age_array[$i]);

   $query .= "UPDATE member SET name = '$name', age = '$age' WHERE id = '$id';";
}

mysql_query($query);
}
...
?>

希望对您有所帮助..!

【讨论】:

    【解决方案2】:

    回答您的问题
    MySQL 更新与 WHERE 子句匹配的所有行,因此要更新具有相同值的多行,您应该使用匹配所有行的条件。要更新所有行,请不要设置任何 where 子句。 要更新具有不同值的多行,您不能使用多个查询。

    回答您的问题
    在您的代码中,$id、$name 和 $age 是数组,因此您不能在字符串中使用它,这是行不通的。您应该在 FOR 循环中进行更新。 我建议您尝试尊重面向资源的原则,即所有属性都分配给它们的项目(使用关联数组或对象)。 如果您不检查结果,您可以使用分号一次性完成所有查询。

    【讨论】:

    • "要使用不同的值更新多行,您不能使用多个查询。"其实你可以,但我们可能不值得
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2011-09-26
    • 2022-08-18
    • 2015-10-16
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多