codeigniter 4 无硬性数据库连接数量限制,实际支持2~5个常见配置,技术上可更多;通过.env或database.php定义多个数据库组(如default、reporting、legacy),运行时用config\database::connect('组名')按需加载并隔离使用。

CodeIgniter 4 本身没有硬性限制同时连接的数据库数量,实际可连接多少个,取决于配置方式和项目需求,常见支持 2~5 个,但技术上可以更多。
关键不在于“最多几个”,而在于你如何组织和调用它们。CI4 的设计允许你定义多个独立的数据库组(比如 default、logging、analytics、legacy),并在运行时按需加载,互不干扰。
多数据库配置位置
CI4 主要通过 .env 文件或 app/Config/Database.php 配置多个数据库连接组:
- 在
.env中可写:database.default.hostname = "localhost" database.default.database = "main_db" database.default.username = "user1"
database.reporting.hostname = "192.168.1.100" database.reporting.database = "report_db" database.reporting.username = "rep_user"
database.legacy.hostname = "old-server" database.legacy.database = "old_system" database.legacy.dbdriver = "mysqli"
- 或在 `app/Config/Database.php` 中手动定义多个 `$db` 实例(兼容旧习惯,但 CI4 更推荐 `.env` 方式)。
每个组名(如 `default`、`reporting`、`legacy`)就是你的数据库标识符,后续加载时直接引用。
---
### <h3>运行时切换与使用多个数据库</h3>
CI4 不自动加载所有数据库,只默认初始化 `default` 组。其他数据库需显式获取:
- 在控制器或服务中这样用:
```php
// 加载并使用 reporting 数据库
$reportDB = \Config\Database::connect('reporting');
// 加载 legacy 数据库(非 default)
$legacyDB = \Config\Database::connect('legacy');
// 各自执行查询,完全隔离
$reportDB->table('sales')->select('*')->get()->getResult();
$legacyDB->query("SELECT * FROM customers")->getResult();
- 每次调用
connect('xxx')都会返回一个独立的数据库实例,内存中可同时存在多个活跃连接。
注意事项与实际约束
-
连接数受 PHP 和数据库服务器限制:比如 MySQL 默认
max_connections=151,若每个请求都打开 3 个数据库连接,高并发下可能耗尽。 - 避免无意义的多连:不是“能连多个”就该连多个;频繁跨库 JOIN 建议用应用层聚合,而非依赖多连接。
-
事务不跨库:CI4 的事务(
transStart()/transComplete())仅作用于当前连接实例,无法跨reporting和legacy同时提交。 -
环境适配要到位:不同环境(dev/staging/prod)的
.env应各自配置对应数据库地址和凭据,避免本地配置误上生产。











