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

CodeIgniter 3.x中Query Builder插入MySQLi数据报错的解决问询

解决CodeIgniter中插入数据时"Call to undefined method 'insert'"的问题

看起来你遇到的问题核心是版本语法混淆或者Query Builder未启用,咱们一步步来排查解决:

首先确认你的CodeIgniter版本

你成功执行查询的代码用了$this->db->table('users')这种写法——这其实是CodeIgniter 4的Query Builder语法,而你说自己在用CodeIgniter 3.x,这大概率是版本认知混淆了。如果是CI4,那你用CI3的$this->db->insert()自然会报错。

情况1:你确实在用CodeIgniter 3.x

如果确定是CI3,那先检查Query Builder是否开启:

  1. 打开application/config/database.php
  2. 找到$query_builder配置项,确保它设置为TRUE(CI3早期版本用$active_record,两者兼容,推荐用$query_builder):
$db['default']['query_builder'] = TRUE;

然后使用CI3标准的插入语法:

$data = array(
    'created_at' => date('Y/m/d h:i:s'),
    'updated_at' => date('Y/m/d h:i:s'),
    'first_name' => $firstName,
    'last_name' => $lastName,
    'email' => $email,
    'auth_key' => $password,
    'enabled' => '1',
    'deleted' => '0'
);

// 执行插入
$test = $this->db->insert('users', $data);

// 可以打印错误信息排查问题
if (!$test) {
    print_r($this->db->error());
}

另外要确保:

  • 你的控制器/模型继承了CI的基类(比如控制器继承CI_Controller,模型继承CI_Model),这样才能正确获取$this->db对象
  • 数据库连接配置正确,能正常连接到MySQLi

情况2:你实际在用CodeIgniter 4(误判版本)

如果你的查询代码能正常运行,那很大概率是你用的是CI4,只是误以为是CI3。这种情况下,插入语法要和查询保持一致,用table()方法:

$data = array(
    'created_at' => date('Y/m/d h:i:s'),
    'updated_at' => date('Y/m/d h:i:s'),
    'first_name' => $firstName,
    'last_name' => $lastName,
    'email' => $email,
    'auth_key' => $password,
    'enabled' => '1',
    'deleted' => '0'
);

// CI4的插入写法
$test = $this->db->table('users')->insert($data);

// 排查错误
if (!$test) {
    $error = $this->db->error();
    print_r($error);
}

额外排查点

如果以上都没问题,检查数据库连接是否有效:

// 打印连接状态,确认不是空对象
var_dump($this->db->conn_id);

如果连接失败,$this->db可能不是有效的数据库对象,导致方法不存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:32:15