CodeIgniter支持多数据库连接,只需在database.php中配置多个数据库组,通过$this->load->database('组名', TRUE)加载并操作,还可动态连接和实现读写分离。

CodeIgniter 连接多个数据库非常直接,核心是配置多个数据库组,再按需加载。不需要改框架源码,也不用额外安装扩展。
在 database.php 中定义多个数据库组
打开 application/config/database.php,你会看到一个以 $db['default'] 开头的数组。只要照着这个格式,新增其他键名(比如 second_db、log_db、report_db)即可:
- 每个组必须有唯一键名,不能重复
- 所有字段(如
hostname、username、database等)都要完整填写,不能省略 -
dbdriver建议统一用mysqli(比旧版mysql更安全稳定) - 如果某个库只读,可设
'pconnect' => FALSE避免连接池干扰
在控制器或模型中加载指定数据库
使用 $this->load->database('组名', TRUE) 加载非默认库,返回独立的 DB 对象:
-
$db1 = $this->load->database('default', TRUE);→ 主库操作 -
$db2 = $this->load->database('second_db', TRUE);→ 第二库操作 - 加
TRUE参数表示“返回对象”,不加则直接赋值给$this->db(会覆盖当前默认实例) - 后续所有查询都通过该对象调用,例如:
$db2->get('users')->result()
动态连接外部数据库(如用户导入时)
当数据库参数来自表单或配置而非固定写死,可在运行时构建配置数组:
- 收集用户输入的
hostname、username、password、database - 拼成标准配置数组(字段名与
database.php完全一致) - 传入
$this->load->database($config, TRUE)即可建立临时连接 - 务必对输入做基础校验(如过滤空值、限制 host 格式),避免 SQL 注入或连接失败
读写分离的简单实现思路
虽无自动路由,但可通过逻辑层控制流向:
- 把
default设为写库(主库),slave设为读库(从库) - 增删改操作统一走
$this->db(即 default) - 查操作根据需要选择:
$this->load->database('slave', TRUE)->get(...) - 如需全局切换,可封装一个
get_read_db()工具方法,内部判断环境或负载决定用哪个从库


















