从MySQL查询result_array结果批量更新时出现未初始化偏移量2报错如何解决
错误原因
- 直接原因是
$value['bprice'][$key]写法错误:result_array()返回的查询结果中,$value为单条行数据的一维数组,$value['bprice']是该行bprice字段的独立数值/字符串,不是数组。额外加[$key]相当于把字符串当作数组按下标取字符,当循环的$key数值超过字符串长度时,就会抛出偏移量未初始化的错误。 - 附加错误:循环内直接覆盖
$data变量而非追加数据,且CodeIgniter的update_batch要求传入的更新数据集为二维数组,每一项必须包含表主键字段用来匹配更新行,否则无法定位要修改的记录。
修复代码
// 查询时必须取出主键字段,示例假设主键为id $this->db->select('id, bprice'); $this->db->from('items'); $this->db->limit(20); $query = $this->db->get()->result_array(); $data = []; foreach ($query as $value) { // 直接取bprice值计算,无需加额外下标 $calcPrice = (float)$value['bprice'] * 1.3; // 追加单条更新数据,必须包含主键 $data[] = [ 'id' => $value['id'], 'branch_price' => $calcPrice ]; } // update_batch第三个参数指定用来匹配的主键字段 return $this->db->update_batch('items', $data, 'id');
内容的提问来源于stack exchange,提问作者Tech Image
相关产品推荐
相关产品推荐

