使用foreach循环更新mysql中的行

时间:2016-02-08 18:38:01

标签: php mysql

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

我有一个这样的数组: order numbers

我想循环浏览并更新表格中的 ordernumber 列。

到目前为止,我有这个设置:

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

但是当我对列表项进行排序时,我得到了这个: todoitem table

只有最后一行得到更新,订单号是3?我不明白3来自哪里。

我已经在这脑子上刮了几天而且我被卡住了......

2 个答案:

答案 0 :(得分:2)

此:

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

从0到3循环(因为这些数字在你的数组中有4个键)。

此:

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

$sql变量设置为字符串,由$key$neworder值构建。

现在,代码实际上从未对该循环中的查询执行任何操作。它每次都会覆盖它。所以循环的 last 迭代将是循环后$sql的值。 (大概那是你实际上在某种程度上使用它。)

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

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

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

答案 1 :(得分:0)

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

对于id为4且行号为3的行,您可能希望更改sql参数 - 使用$key切换$neworder。那是

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