CodeIgniter通过多维数组定义多组数据库配置(如default、development、production),配合$active_group变量或环境目录隔离实现安全可靠的环境切换,动态连接仅作运行时补充。

在 CodeIgniter 中管理不同环境的数据库配置,关键不是写多套代码,而是利用框架原生支持的“多组连接 + 环境感知”机制,让配置清晰、切换可靠、不污染逻辑。
用多维数组定义多个数据库组
CodeIgniter 的 application/config/database.php 文件天然支持多组配置。每个组是一个独立键名(如 default、development、production),结构完全一致:
- 不要覆盖 default 组——它只是默认加载项,可保留为开发环境配置;
- 新增组时直接添加新键,比如
$db['staging'] = [...]或$db['ci4_test'] = [...]; - 每组都需包含完整字段:hostname、username、password、database、dbdriver、char_set、dbcollat 等,避免因缺失导致连接失败;
- 推荐统一使用
mysqli(CI3)或mysql(CI4)驱动,避免混用mysql(已废弃)和pdo导致兼容问题。
通过 $active_group 控制当前生效组
文件末尾的 $active_group 变量决定启动时加载哪一组:
- 开发阶段设为
$active_group = 'development';; - 上线前改为
$active_group = 'production';; - 若配合 CI 的环境常量(如
ENVIRONMENT === 'production'),可用条件赋值实现自动切换; - 注意:该变量必须在所有
$db[...]定义之后设置,否则无效。
结合环境目录做物理隔离(推荐进阶用法)
CodeIgniter 支持按环境加载独立配置文件。把不同环境的 database.php 分别放在:
- application/config/development/database.php
- application/config/production/database.php
再在主 index.php 中正确设置 define('ENVIRONMENT', 'production');,框架会自动优先加载对应环境目录下的配置,主配置文件被跳过。这种方式更安全,避免误提交生产密码到开发分支。
动态连接作为补充,不替代环境配置
遇到需要运行时切换库(例如租户系统按用户 ID 连不同库),不要改 $active_group,而应调用:
-
$db2 = $this->load->database($config_array, TRUE);—— 返回独立 DB 对象; - 其中
$config_array可从模型方法中动态生成,比如根据用户所属客户查出库名与凭据; - 务必设第二个参数为
TRUE,否则会覆盖默认$this->db,引发后续查询异常。


















