【问题标题】:Updating rows in mysql with a foreach loop使用 foreach 循环更新 mysql 中的行
【发布时间】:2016-05-18 13:00:14
【问题描述】:

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

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

我想遍历这个并更新我表中的 ordernumber 列。

到目前为止,我已经设置好了:

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

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

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

这几天我一直在摸不着头脑,我很困惑......

【问题讨论】:

  • 上面的语句只显示了查询 - 实际上是在哪里 执行 ?也许在循环之外,这可以解释为什么只有 last 项得到更新。另外,请更新您的问题并显示文本而不是提供图像。
  • 看看this

标签: php mysql


【解决方案1】:

这个:

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。
  • 执行查询。

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

【讨论】:

  • 谢谢!我很笨,没有把执行代码放在循环中……还有很多东西要学!
【解决方案2】:

您正在循环中覆盖您的 $sql 变量。您还应该在循环内执行它。这样只有最后一个 $sql 被执行。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2016-12-28
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多