You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:14