如何解决使用 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 举报,一经查实,本站将立刻删除。