codeigniter 4数据库连接失败需从配置、环境、驱动三者对齐排查:hostname改用'127.0.0.1'避免unix socket路径错误;确认php已启用mysqli扩展且cli/web php.ini一致;mysql 8.0+需切换为mysql_native_password认证或升级php;多库加载必须用$this->load->database('name', true)显式获取实例。

CodeIgniter 4 启动时直接报错 “Unable to connect to your database server using the provided settings”,页面空白或显示致命错误,说明框架在加载数据库驱动前就已中断——此时调试代码根本没机会执行,必须从配置、环境、驱动三者对齐入手排查。
确认 database.php 配置项是否写错
打开 app/Config/Database.php,重点检查 $default 数组中的四项:hostname、username、password、database。
hostname 写成 'localhost' 在 Linux 生产环境大概率失败,【必须改成 '127.0.0.1'】。因为 'localhost' 会强制走 Unix socket,而 PHP 很可能找不到 mysqld.sock 路径(如 /var/run/mysqld/mysqld.sock),报错 mysqli::real_connect(): (HY000/2002): No such file or directory。
password 字段不能为空字符串但也不能漏写,哪怕数据库密码为空,也得保留引号:'password' => ''。
database 名必须与 MySQL 中实际存在的库名完全一致,区分大小写,且该用户对该库有 USAGE + SELECT 权限。
验证 PHP 是否真正加载了数据库扩展
运行 php -m | grep -i mysqli 检查 mysqli 扩展是否启用。如果没输出,说明扩展未加载。
Windows 下 php.ini 中 extension=php_mysqli.dll 必须取消注释;Linux/macOS 下需确认 extension=mysqli 已启用,且不是 extension=mysql(PHP 7.0+ 已彻底移除)。
【关键陷阱:CLI 和 Web 用的 php.ini 不同】。执行 php --ini 查看 CLI 加载路径,再查 Apache 或 Nginx 的 phpinfo() 页面确认 Web 环境实际加载的 php.ini 位置——改错文件等于白改。
MySQL 8.0+ 用户认证协议不兼容
若报错 Client does not support authentication protocol requested by server,是 MySQL 8.0 默认使用 caching_sha2_password 插件,而旧版 PHP 的 mysqli 不支持。
方法一(开发环境快速解法):登录 MySQL 执行:
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
方法二(生产环境推荐):升级 PHP 至 7.4+,并确保 mysqli 编译时启用了 OpenSSL 支持(可通过 php -i | grep openssl 验证)。
多数据库配置后第二个库加载失败
第一步:在 app/Config/Database.php 中正确定义第二个库配置,例如 $db['second_db'] = [ … ];
第二步:控制器中不能只写 $this->load->database('second_db');
第三步:必须加 TRUE 参数并手动赋值:
$secondDB = $this->load->database('second_db', TRUE);
第四步:后续所有查询都通过 $secondDB 实例调用,例如 $secondDB->table('logs')->get()->getResult();
不加 TRUE 参数会导致 CodeIgniter 把连接挂到 $this->db 上,覆盖默认库实例,造成静默失败。










