微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 PHP foreach 循环在数组中更新多个 MYSQL 行,仅更新一行

如何解决使用 PHP foreach 循环在数组中更新多个 MYSQL 行,仅更新一行

我正在尝试使用数组 (PHP) 中的数据更新多行 (MysqL),但仅根据数组中的第一个值更新了一行。我知道我只是在某处缺少一个循环。我已经在使用 foreach 循环,但这似乎还不够。我快要得到它了。如何修改现有代码以确保所有行都更新为正确的信息?

首先,$unit_details 数组包含以下内容

array(3) { 
  [0]=> array(4) { ["pid"]=> string(5) "29013" ["vid"]=> string(5) "29018" ["tax"]=> string(5) "10.74" ["upr"]=> string(5) "123.6" } 
  [1]=> array(4) { ["pid"]=> string(5) "29013" ["vid"]=> string(5) "29474" ["tax"]=> string(5) "13.81" ["upr"]=> string(5) "158.9" } 
  [2]=> array(4) { ["pid"]=> string(5) "29282" ["vid"]=> string(5) "29283" ["tax"]=> string(5) "34.76" ["upr"]=> string(3) "400" } 
}
    $updtunits = '';
    $order_id = '31989';
    $upar='';
    $uchid='';
    $utax='';
    $uamt='';

    foreach ($unit_details as $udt) {
        $upar .= $udt['pid'];
        $uchid .= $udt['vid'];
        $utax .= $udt['tax'];
        $uamt .= $udt['upr'];

        $updarr = array(
            "net_rev" => $uamt,"tx_amount" => $utax
        );
        $updwhr = array(
            "order_id" => $order_id,"prod_id" => $upar,"var_id" => $uchid
        );

        $updtunits =  $docdb->update("ords_Meta",$updarr,$updwhr);
    }

数据库表 ords_Meta 截图: Link to Database Screenshot Here

注意:问题中的原始代码使用 $docdb->query。已经修改为使用$docdb->update,根据情况适当使用 https://developer.wordpress.org/reference/classes/wpdb/update/。 wpdb::update() 认情况下(不带格式参数)将数据转换为字符串。

解决方法

您正在将所有字段值加在一起

$upar .= $udt['pid']

使用 .= 表示添加值。

所以第一次是 29013,然后是 2901329013 等等。因为这是用 $upar 完成的,它只会找到循环中的第一项。

因此您实际上不需要添加这些值。

但是,您应该使用准备好的语句。因此,您可以在循环之前 prepare() 更新,然后为循环中的每组值execute 更新。

,

删除.

$upar = $udt['pid'];
$uchid = $udt['vid'];
$utax = $udt['tax'];
$uamt = $udt['upr'];

. 将数据附加到变量

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。