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

CodeIgniter中Model/Controller返回异常:数据插入成功却走else分支

问题分析与解决方案

看起来你遇到了个有点矛盾的问题:数据明明已经成功写入数据库,但Model却返回false,导致控制器一直走else分支。核心问题出在你用affected_rows()判断插入结果的逻辑上——这个方法多数时候没问题,但在某些场景下可能会出现判断不准确的情况,哪怕数据确实插入成功了。

解决方案1:直接使用insert()方法的返回值(最推荐)

CodeIgniter的$this->db->insert()方法本身就会返回布尔值,直接代表插入操作是否成功。相比affected_rows(),这个判断逻辑更直接、可靠。修改你的Model代码如下:

// 向表中添加记录的函数
public function add($data){
    // 直接用insert的返回值判断操作结果
    if ($this->db->insert('xin_employees', $data)) {
        return true;
    } else {
        return false;
    }
}

解决方案2:结合insert_id()辅助判断(针对带自增主键的表)

如果你的xin_employees表有自增主键字段,那么插入成功后$this->db->insert_id()会返回新生成的主键ID(值大于0)。可以结合这个值做更稳妥的双重判断:

public function add($data){
    $this->db->insert('xin_employees', $data);
    // 只要影响行数>0 或者生成了有效自增ID,就判定插入成功
    if ($this->db->affected_rows() > 0 || $this->db->insert_id() > 0) {
        return true;
    } else {
        return false;
    }
}

排查步骤(若以上方案无效)

  1. 在Model的add函数里临时输出affected_rows()的实际值,确认它的返回情况:
    public function add($data){
        $this->db->insert('xin_employees', $data);
        $affected = $this->db->affected_rows();
        var_dump($affected); // 临时输出,测试完成后删除
        if ($affected > 0 ) {
            return true;
        } else {
            return false;
        }
    }
    
  2. 检查数据库驱动配置(application/config/database.php),确保$db['default']['dbdriver']设置正确(比如mysqli或pdo_mysql),不同驱动对affected_rows()的处理逻辑可能存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:51:35