使用 foreach 循环更新 mysql 中的行


Updating rows in mysql with a foreach loop

刚开始学习php,这是我的第一个项目:对列表项进行排序并将该新订单保存到数据库。但我真的坚持如何用新订单号保存订单。

我有一个这样的数组:订单号

我想遍历它并更新表中的订单号列。

到目前为止,我已经进行了此设置:

foreach ($a as $key => $neworder) {
    $sql = "UPDATE todoitem SET ordernumber = '$key' WHERE Id = '$neworder'";
}

但是当我对列表项进行排序时,我得到这个:待办事项表

只有最后一行更新,订单号是 3?我不明白这3个是从哪里来的。

几天来我一直在为此挠头,我被困住了......

这个:

foreach ($a as $key => $neworder) {

从 0-3 循环(因为数组中有 4 个键)。

这:

$sql = "UPDATE todoitem SET ordernumber = '$key' WHERE Id = '$neworder'";

$sql变量设置为由 $key$neworder 值生成的字符串。

现在,代码实际上从未对该循环中的查询执行任何操作。 它只是每次都覆盖它。 因此,循环的最后一次迭代将是循环后的$sql值。 (大概这就是你以某种方式实际使用它的地方。

如果我的假设是正确的,并且您在循环执行查询,则代码在语义上执行以下操作:

  • 将查询设置为使用 0。
  • 将查询设置为使用 1。
  • 将查询设置为使用 2。
  • 将查询设置为使用 3。
  • 执行查询。

它只执行一次。 也许您打算在循环中执行查询?

您正在覆盖循环中的$sql变量。您还应该在循环中执行它。这样,只会执行最后的$sql

至于 id 为 4 且订单号 3 的行,您可能需要更改 sql 参数 - 使用 $neworder 切换$key。那是

"UPDATE todoitem SET ordernumber = '$neworder' WHERE Id = '$key'";