CodeIgniter 4 通过 database.[group].[key] 格式解析 .env 配置数据库,不识别 DB_HOST 等 Laravel 风格变量;需将 .env 放根目录,修改后清空 writable/cache 缓存,密码含特殊字符须用单引号包裹。

CodeIgniter 4 默认支持 .env 文件配置数据库,但要注意:它**不直接读取 .env 中的原始键名(如 DB_HOST)来初始化数据库连接**,而是通过预定义的环境变量映射机制,由框架自动加载并转换为数据库配置数组。
核心写法:用标准 CI4 环境变量名
在 .env 文件中,必须使用 CodeIgniter 4 官方约定的变量名(全部大写、带前缀),例如:
# 数据库配置(必须按此命名) database.default.hostname = localhost database.default.database = myapp_db database.default.username = root database.default.password = database.default.DBDriver = MySQLi database.default.DBPrefix = database.default.port = 3306 database.default.Charset = utf8mb4 database.default.DBCollat = utf8mb4_unicode_ci database.default.SwapPre = database.default.Encrypt = false database.default.Debug = false database.default.MultipleStatements = true database.default.StrictOn = true database.default.Port = 3306
✅ 这些是以 database.[group].[key] 格式写的,CI4 的 DotEnv 类会自动解析并注入到数据库配置中。
⚠️ 不要写成 DB_HOST=localhost 这类 Laravel 风格 —— CI4 默认不识别,除非你手动重写加载逻辑。
常见组合:MySQL / PostgreSQL / SQLite 快速切换
只需改 DBDriver 和对应参数即可,其他字段可保留或删减:
-
MySQL / MySQLi:
DBDriver = MySQLi(推荐),端口默认 3306,需确保扩展已启用 -
PostgreSQL:
DBDriver = Postgre,同时设置hostname、username、password、database、port=5432 -
SQLite:
DBDriver = SQLite3,此时只用database指向绝对路径(如/var/www/myapp/writable/database.db),其他字段可省略
注意事项和排错点
如果配置后报“Database: Unable to connect”,检查以下几项:
-
.env文件必须放在项目根目录(与public/同级),且文件名是.env(开头带点) - 确认
app/Config/Database.php中未硬编码覆盖配置 —— 默认它会调用Config\DotEnv::load()并合并环境变量 - 修改
.env后需清空writable/cache/目录(CI4 缓存配置),否则旧值可能仍生效 - 密码含特殊字符(如
@、/、:)时,建议用单引号包裹:database.default.password = 'p@ss/w0rd'
进阶:多数据库组配置
如需读写分离或多个库,可在 .env 中定义不同组:
# 主库(用于写) database.primary.hostname = master.example.com database.primary.database = app_main database.primary.username = app_rw database.primary.password = 'xxx' <h1>从库(用于读)</h1><p>database.secondary.hostname = slave.example.com database.secondary.database = app_main database.secondary.username = app_ro database.secondary.password = 'yyy'
然后在代码中用 $db = \Config\Database::connect('secondary'); 显式调用指定组。


















