应保存动态加载的数据库实例引用并调用其close()方法关闭指定连接:$db2 = $this->load->database($config, true); $db2->close(); 否则连接将持续占用资源。

在 CodeIgniter 中,当你使用了多个数据库连接(比如默认库 + 动态加载的第二个库),关闭指定连接而非全部连接,关键在于持有该连接的实例引用,然后调用其 close() 方法。CodeIgniter 不会自动回收你手动加载的额外连接,不关就会持续占用资源。
明确获取并命名你的额外数据库实例
动态加载第二个数据库时,必须用变量保存返回的对象,否则后续无法定位、也无法关闭它:
- 错误写法(无引用,无法关闭):
$this->load->database($config); - 正确写法(保存为独立对象):
$db2 = $this->load->database($config, TRUE); // TRUE 表示返回对象而非绑定到 $this->db
这里的 TRUE 参数至关重要——它让框架返回一个独立的数据库对象,而不是覆盖或混入默认的 $this->db。
调用 close() 关闭指定连接
拿到数据库对象后,直接调用它的 close() 方法即可释放该连接:
$db2->close();- 执行后,该连接底层的 MySQLi 或 PDO 句柄会被关闭,TCP 连接断开,内存资源被释放
- 此后再调用
$db2->query()会报错,说明已生效
避免常见误区
-
$this->db->close()只关闭默认连接(default组),对$db2无效 - 不要依赖 PHP 脚本结束时自动释放:CLI 或长连接场景下可能持续数分钟,连接堆积风险高
- 动态连接配置中若含敏感信息(如用户传入的密码),应在
close()后及时将$db2设为null,防止意外残留
实际使用建议
- 在数据导入、同步等一次性任务完成后立即关闭:
$db2->query($sql); $db2->close(); $db2 = null; - 如果同一请求中需多次切换连接,可重复加载+关闭,但注意不要在循环内反复新建连接而不关闭
- 调试时可用
var_dump($db2->conn_id)查看是否为有效资源句柄,close()后应变为null或false











