codeigniter 3 和 4 的数据库配置在结构、语法、加载机制和环境变量支持上存在本质差异:ci3 使用 application/config/database.php 返回二维数组,ci4 使用 app/config/database.php 继承 baseconfig 类;ci3 不内置 .env 支持,ci4 更易集成 dotenv;ci3 每次请求重载配置,ci4 在初始化早期实例化,错误更早暴露;ci3 不支持配置继承,ci4 支持多组配置、子类覆盖和环境条件赋值。

CodeIgniter 3 和 4 的数据库配置文件在结构、语法、加载机制和环境变量支持上存在本质差异,不是简单改个路径就能迁移的。
配置文件位置与格式不同
CI3 的数据库配置写在 application/config/database.php,是一个返回二维数组的 PHP 文件,核心结构是:$db['default'] = [ 'dbdriver' => 'mysqli', 'hostname' => 'localhost', ... ];
所有键名必须严格匹配,缺一不可,否则连接失败时容易报 Undefined index。
CI4 的配置文件位于 app/Config/Database.php,是一个继承 BaseConfig 的类,配置项是 public 属性:public $default = [ 'DSN' => '', 'hostname' => 'localhost', ... ];
类型错误(比如把字符串写成数组)、属性名拼错或遗漏,会导致框架启动失败,但错误提示往往不直接指向配置文件。
环境变量支持能力不同
CI3 官方不解析 .env 文件,数据库配置只能硬编码或用 getenv() 手动读取,例如:$db['default']['hostname'] = getenv('DB_HOST') ?: 'localhost';
CI4 同样不内置 .env 支持,但因采用类结构,更便于集成第三方库(如 vlucas/phpdotenv)。若在入口文件提前加载 dotenv,就可以在 Database.php 中直接使用:public $default = [ 'hostname' => $_ENV['DB_HOST'] ?? 'localhost', ... ];
加载时机与错误表现不同
CI3 每次请求都重新 require database.php,修改后立即生效,没有缓存;出错多表现为连接失败或 PHP Notice。
CI4 的 Database 类在框架初始化早期就被实例化,一旦属性定义有误(如把 public $default 错写成 public $defaults),会在 autoload 阶段就中断,页面可能空白或报 Fatal Error,调试需检查日志或启用开发模式。
配置合并与复用逻辑不同
CI3 允许通过多个 $db['xxx'] 定义多个数据库组,并在模型中用 $this->load->database('xxx') 切换;配置本身不支持继承或条件判断。
CI4 的 Database 类支持多组配置(如 public $testing),也支持在子类中覆盖属性,还可结合环境常量做条件赋值,例如:public $default = ENVIRONMENT === 'production' ? [/* 生产配置 */] : [/* 开发配置 */];











