Codeigniter中$this->db->update()无法更新数据表问题求助
问题分析与解决方案
核心错误点
- 数据结构不匹配:控制器里通过
$fdata[] = array(...)构建的是二维数组,但模型中直接尝试访问$fdata['bill_id'],这会导致无法获取到正确的bill_id值,更新条件自然不匹配。 - 逻辑判断时机错误:模型里的
$this->db->affected_rows()在执行update操作前调用,此时未进行任何数据库操作,返回值为0,直接跳过了后续的更新代码块。 - 冗余操作:控制器循环生成文件数据时,
bill_id是同一个值,不需要重复执行更新操作,一次更新即可。
修正后的代码
模型代码
function addBills($billId) { if (!empty($billId)) { // 直接执行更新操作,无需提前判断affected_rows return $this->db->update( 'store_update_stock', array('bill_status'=>'Added'), array('update_stock_id' => $billId) ); } return FALSE; }
控制器代码
if (!empty($files)) { $billId = $this->input->post('bill'); // 执行一次状态更新即可,因为bill_id是同一个 $this->Item_model->addBills($billId); // 处理文件数据(如果需要插入文件记录,可补充批量插入逻辑) $fileRecords = []; foreach ($files as $fname) { $fileRecords[] = array( 'bill_id' => $billId, 'file_name' => $fname, 'status' => 1 ); } // 若需插入文件记录,执行批量插入 // $this->db->insert_batch('your_files_table', $fileRecords); }
补充排查技巧
开启CodeIgniter数据库调试模式,查看生成的SQL语句,能快速定位参数是否正确:
$this->db->db_debug = TRUE;
内容的提问来源于stack exchange,提问作者mcode
相关产品推荐
相关产品推荐

