codeigniter控制器连接数据库有三种方式:自动加载(推荐,配置autoload.php)、手动加载(支持多库切换)、动态传参(适用于安装向导等场景);需注意连接状态判断、active_group配置及生产环境关闭db_debug。

CodeIgniter 在控制器里连接数据库,核心是调用框架的数据库加载器。默认配置已写在 application/config/database.php 中,只要正确设置并加载,就能直接使用 $this->db 对象操作。
自动加载数据库(推荐)
如果项目多数功能都需要数据库,最省事的方式是让数据库库自动加载:
- 打开
application/config/autoload.php - 找到
$autoload['libraries']数组 - 加入
'database',例如:$autoload['libraries'] = array('database', 'session');
这样每个控制器初始化时都会自动连接 default 数据库组,无需手动加载,$this->db->get('users') 可直接用。
按需手动加载(灵活控制)
适合多数据库切换、测试连接或仅个别方法需要 DB 的场景:
- 在控制器方法内调用:
$this->load->database();
这会加载default组,并初始化$this->db - 若要加载其他预设组(如
test或slave):$this->load->database('test'); - 加载后即可执行查询:
$query = $this->db->select('*')->from('posts')->where('status', 1)->get();
动态传参连接(不依赖 config 文件)
适用于安装向导、连接测试页等需用户输入 DB 参数的场景:
- 构造配置数组(字段名与 database.php 中一致):
$config = array(<br> 'hostname' => $this->input->post('host'),<br> 'username' => $this->input->post('user'),<br> 'password' => $this->input->post('pass'),<br> 'database' => $this->input->post('name'),<br> 'dbdriver' => 'mysqli',<br> 'db_debug' => FALSE<br> ); - 加载并验证连接:
$db_obj = $this->load->database($config, TRUE);<br> if ($db_obj && $db_obj->conn_id) {<br> // 连接成功<br> } else {<br> // 连接失败,可提示错误<br> }
常见注意事项
避免踩坑的关键点:
-
不要用
if($this->load->database())判断成败 —— 它总是返回对象,无法反映真实连接状态;应检查$db_obj->conn_id或调用$db_obj->initialize() - 确保
$active_group在 config/database.php 中已正确定义,否则可能加载空配置 - 生产环境建议关闭
db_debug,防止敏感信息泄露 - 若使用 PDO 驱动,注意
dsn字段需完整填写(如mysql:host=localhost;dbname=test)











