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; } }
排查步骤(若以上方案无效)
- 在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; } } - 检查数据库驱动配置(
application/config/database.php),确保$db['default']['dbdriver']设置正确(比如mysqli或pdo_mysql),不同驱动对affected_rows()的处理逻辑可能存在差异。
内容的提问来源于stack exchange,提问作者user7461010
相关产品推荐
相关产品推荐

