WordPress使用wpdb->update更新多行数据不生效如何解决
WordPress
$wpdb->update() 批量更新数据不生效问题修复 代码存在的核心问题
- 循环边界错误:
$update和$condition都是仅包含2个元素的数组,有效索引为0、1,但循环条件写为$x <=2,会读取索引为2的不存在元素,触发数组越界报错 - 方法传参不符合规范:
$wpdb->update()要求传入的更新数据、查询条件都必须是一维关联数组,但你在循环里每次都把整个二维的$update、$condition全量传入,没有按循环下标取对应单条数据,方法无法正确解析生成SQL语句,自然不会更新数据 - 缺少执行结果校验:
$wpdb->update()执行失败时会返回false,你没有打印返回值和数据库错误信息,无法第一时间定位执行异常
$wpdb->update()参数要求:
- 第一个参数为操作表名
- 第二个参数为
[字段名 => 更新值]格式的一维数组,对应SET子句- 第三个参数为
[条件字段名 => 条件值]格式的一维数组,对应WHERE子句
传入二维数组会直接导致SQL生成失败。
修正后可运行代码
global $wpdb; $table_name = $wpdb->prefix . 'test'; $check_first = 1; $check_second = 2; // 待更新数据与条件按下标一一对应 $update_list = [ ['value' => $check_first], ['value' => $check_second] ]; $condition_list = [ ['name' => 'enable'], ['name' => 'picked'] ]; // 用数组实际长度做循环边界,避免硬编码长度导致越界 for ($x = 0; $x < count($update_list); $x++) { $wpdb->update( $table_name, $update_list[$x], // 传入当前循环对应的单条更新数据 $condition_list[$x], // 传入当前循环对应的单条查询条件 ['%d'], // 指定value字段为整数格式,做安全过滤 ['%s'] // 指定name字段为字符串格式,做安全过滤 ); }
内容的提问来源于stack exchange,提问作者ctlpquudz
相关产品推荐
相关产品推荐

