codeigniter模型默认可直接使用$this->db,前提是数据库已自动加载、控制器显式加载或模型自身加载;多库需用$this->load->database($config, true)获取独立实例。

CodeIgniter 的模型默认就可直接使用 $this->db,无需手动连接——只要数据库已在配置中启用且自动加载或显式加载过。
模型里用数据库的前提
确保以下任一条件满足:
-
数据库已自动加载:在
application/config/autoload.php中启用了'database',例如:$autoload['libraries'] = array('database'); -
控制器中显式加载:在调用模型前,控制器里执行了
$this->load->database();(推荐在构造函数或方法中加载) -
模型自身加载(不常用但可行):在模型的
__construct()中写$this->load->database();,但需注意避免重复加载
模型中直接操作数据库的典型写法
继承 CI_Model 后,$this->db 实例天然可用。例如:
class User_model extends CI_Model {
public function get_users() {
return $this->db->get('users')->result();
}
public function insert_user($data) {
return $this->db->insert('users', $data);
}
}
只要配置文件 application/config/database.php 中的 $db['default'] 正确,且 $active_group = 'default';,模型就能立即访问数据库。
多数据库或动态连接时的处理
若需在模型中切换或新建连接(如连接另一个库),可用 $this->load->database($config, TRUE) 获取独立实例:
-
TRUE表示返回 DB 对象而非加载器本身 - 把连接配置数组传入,避免修改全局配置
- 建议将该实例赋给局部变量(如
$db2 = $this->load->database($config, TRUE);),再调用$db2->query()等方法
注意事项
不要在模型里写 mysql_connect() 或原生 PDO 连接——这违背 CI 的封装逻辑;也不要用 @$this->db->initialize() 做连接检测,它只重初始化已有连接,不能替代真正的连通性验证。真正测试连接是否有效,应在控制器层用动态配置 + try/catch 或 ping() 方法(需驱动支持)。











