codeigniter数据库配置不生效主因是路径、权限、环境或加载时机问题,而非参数错误:ci3依赖application/config/database.php但易被.env覆盖,ci4则完全依赖.env且严禁bom头、全角字符或错误键名,部署时需确保文件位置正确、权限合理、环境匹配。

CodeIgniter数据库配置不生效,通常不是代码写错了,而是配置根本没被框架读到或加载失败。问题多出在“路径、权限、环境、加载时机”这四个环节,而不是database.php里参数对不对。
配置文件没被正确加载
CI3和CI4加载配置的机制不同,容易混淆:
- CI3默认从application/config/database.php读取,但若项目启用了.env且设置了CI_ENVIRONMENT=production,部分自定义加载逻辑可能跳过该文件
- CI4完全依赖.env,如果.env文件放在web可访问目录(比如public下)、权限是777、或被Git忽略未上传,配置就等于不存在
- 部署到子域名或二级目录时,index.php中$pathsPath指向错误,导致app/Config/Database.php压根没加载
配置路径或格式被覆盖
有些项目会手动重载数据库配置,反而让原始设置失效:
- 控制器中调用$this->load->database()时没传参数,却在其他地方用$this->load->database('other', TRUE)切换了实例,导致$this->db指向的是第二个库
- CI4中app/Config/Database.php里的配置若与.env冲突,以.env为准;但若.env里漏写了database.default.DBDriver,就会回退到默认值(如SQLite),而非你期望的MySQLi
- CI3中若在autoload.php里预加载了数据库,但database.php里db_debug = FALSE,错误就被静默吞掉,看起来像“没生效”
文件编码或隐藏字符干扰
看似正常的配置文件,可能因编辑器保存方式导致失效:
- database.php或.env文件开头含BOM头(尤其Windows记事本保存),CI4会直接解析失败,报错SyntaxError但不提示具体位置
- .env中键名写成DATABASE_DEFAULT_HOSTNAME(CI4不识别)而非database.default.hostname,字段就完全被忽略
- 配置值里混入全角空格、中文引号或换行符,比如password = “123”(用了中文双引号),PHP无法解析该行
运行环境与配置不匹配
配置内容本身没问题,但服务器环境不支持它:
- 写hostname = 'localhost',Linux服务器上实际走Unix socket,而PHP找不到mysqld.sock路径,连接失败——此时配置“生效”了,但执行不通
- MySQL 8.0+用户用caching_sha2_password认证,而PHP mysqli扩展版本太低,连认证握手都过不去,报错像“连接被拒绝”,让人误以为配置地址错了
- 共享主机(如Namecheap)强制数据库名/用户名加cPanel前缀,但配置里写的还是本地短名,结果连的是不存在的库,报Unknown database











