codeigniter 4数据库配置必须通过.env文件完成,而非database.php;需复制.env.example为.env,填写hostname、username、password、database四字段,并设ci_environment=development以显示错误。

在CodeIgniter 4项目中正确配置数据库连接,是让应用读写数据的前提——配错 hostname、漏设 .env 文件或混淆 CI4 与 CI3 的配置路径,都会导致“Database connection failed”错误且无明确提示。
确认 CI4 项目已初始化完成
运行 composer create-project codeigniter4/appstarter myproject 创建项目后,进入目录检查是否存在 .env 文件(不是 .env.example)和 app/Config/Database.php。CI4 【完全忽略 app/Config/Database.php 中的数据库配置】,只从 .env 读取,这点和 CI3 截然不同。
若只有 .env.example,执行 cp .env.example .env 复制并重命名;否则后续所有数据库配置均无效。
编辑 .env 文件启用数据库配置
用文本编辑器打开项目根目录下的 .env 文件,取消注释以下四行并填入真实值:
database.default.hostname = localhostdatabase.default.username = rootdatabase.default.password = database.default.database = myapp_db
注意:hostname 写 localhost 仅适用于本机直连 MySQL;若用 Docker 或远程数据库,必须改用实际 IP 或容器名(如 mysql-container),【localhost 在 Docker 网络中指向容器自身,而非宿主机 MySQL】。
保存文件后,确保 CI_ENVIRONMENT = development 已启用——否则数据库错误会被静默吞掉,你只会看到空白页。
验证连接是否生效
在控制器中插入测试代码:
打开 app/Controllers/TestController.php,添加方法:
public function dbtest(){ $db = \Config\Database::connect(); if ($db->connID) { echo '✅ 数据库连接成功'; } else { echo '❌ 连接失败:' . $db->error()['message']; }}
访问 http://localhost:8080/test/dbtest 即可直观判断配置结果。
如果报错 “Access denied for user”,说明 username/password 错误;若提示 “Connection refused”,大概率是 hostname 或端口不对,或 MySQL 服务根本没运行。
多环境数据库切换(可选)
方法一:通过 .env 变量动态切换
在 .env 中定义两组配置:
database.development.hostname = 192.168.1.100database.development.username = devuserdatabase.production.hostname = db-prod.company.comdatabase.production.username = produser
再设置当前激活组:database.default.group = development
方法二:运行时动态加载指定组
在任意逻辑中直接调用:$db = \Config\Database::connect('production');
该语句会跳过 .env 中的 default.group,强制使用 production 配置组。
注意:CI4 不支持像 CI3 那样在 database.php 里定义多个数组键来切换——所有分组必须在 .env 中以 database.{groupname}. 前缀声明。










