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

CodeIgniter2.2.2报需使用set方法更新记录错误排查

CodeIgniter 2.2.2 后台更新数据报错修复
  • 问题场景:CodeIgniter 2.2.2站点未改动任何业务代码,仅在安装新SSL证书后出现故障,此前所有功能运行正常。通过后台编辑站点信息时抛出错误:Error: You must use the set method to update a record. File name: admin_m.php Line number: 25
  • 错误定位:报错指向模型文件admin_m.php中editInfo方法的$this->db->update('tbl_info', $data);行,相关业务代码如下:
function getInfo()
{
    $this->db->select();
    $this->db->from('tbl_info');
    $this->db->where('id', 1);
    $query = $this->db->get();
    
    return $query->result();
}
function editInfo($data)
{  
    $this->db->where('id', 1);
    $this->db->update('tbl_info', $data); // 报错指向该行
    return TRUE;
}

问题原因

这个报错和SSL证书本身没有直接关系,是安装证书过程中连带调整的跳转规则、环境配置导致触发了CI框架的内置校验:CI 2.x的Active Record类执行update操作时,如果传入update方法的第二个更新数据参数为空、格式不是数组/对象,且之前没有调用set()方法指定要更新的字段,就会直接抛出这个错误。
常见触发原因有三个:

  • 配置HTTPS强制跳转时规则写错,后台表单POST提交时被301跳转丢失了POST数据,控制器传给模型的$data是空数组
  • 装证书时同步升级/切换了PHP版本,PHP的POST解析、全局过滤规则变更,导致表单提交的字段被全部过滤,拿不到有效更新数据
  • 站点后台表单的action地址还是HTTP路径,HTTPS站点下提交表单被浏览器安全策略拦截,POST数据没传上来

修复步骤

  1. 先确认入参是否正常:在editInfo方法最开头加调试代码打印$data,确认拿到的更新数据是否为空
    function editInfo($data)
    {  
        // 临时调试用,确认数据后删掉
        print_r($data);exit;
        $this->db->where('id', 1);
        $this->db->update('tbl_info', $data);
        return TRUE;
    }
    
    如果打印出来是空数组,就顺着调用链路往上查控制器层接收POST数据的逻辑,优先检查HTTPS跳转规则、表单提交地址是否为HTTPS、有没有WAF/安全插件拦截POST请求。
  2. 调整模型层更新逻辑兼容场景:确认入参丢失问题修复后,也可以把update逻辑改成调用set方法传值,避免后续再触发同类校验错误:
    function editInfo($data)
    {  
        if(empty($data)){
            return TRUE; // 没有需要更新的数据直接返回
        }
        $this->db->where('id', 1);
        $this->db->set($data);
        $this->db->update('tbl_info');
        return TRUE;
    }
    
  3. 临时兜底方案:如果暂时找不到入参丢失的根因需要先恢复业务,可以打开system/database/DB_active_rec.php文件,找到抛出该错误的判断逻辑(对应count($this->ar_set) == 0的判断分支),临时注释掉抛出错误的代码,但这个方法会绕过框架的安全校验,只适合临时救急,不建议长期使用。

内容的提问来源于stack exchange,提问作者Proger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:26