CodeIgniter多数据库连接失败通常源于配置、加载方式或环境不匹配。需核对:数据库配置是否完整唯一(如$db['default']、$db['log_db']);加载非默认库必须用TRUE参数并赋值;确认对应PHP扩展已启用且版本兼容;Linux/Docker中hostname避免用localhost,改用127.0.0.1或服务名。

CodeIgniter多数据库连接出问题,通常不是代码写错了,而是配置、加载方式或环境没对齐。排查时别急着改业务逻辑,先按这几个关键点逐项核对。
数据库配置是否完整且命名唯一
多库必须在 application/config/database.php 中明确定义多个子数组,每个键名不能重复,例如:
- $db['default']:主库(必须存在)
- $db['log_db']、$db['report_db']:其他库,键名需全小写、无空格、不与系统保留字冲突
- 每个子数组内必须包含 hostname、username、password、database、dbdriver 等必要字段
加载时是否显式启用返回实例
调用非默认库时,必须加 TRUE 参数,否则 CI 不返回数据库对象,后续操作会静默失败:
- ✅ 正确:$this->log_db = $this->load->database('log_db', TRUE);
- ❌ 错误:$this->load->database('log_db');(只加载,不赋值,无法调用 $this->log_db->query())
- 加载后建议立即验证:if (!$this->log_db->conn_id) { log_message('error', 'Log DB connection failed'); }
驱动兼容性与 PHP 扩展是否就绪
不同数据库需对应启用的 PHP 扩展,且版本要匹配:
- MySQL/MariaDB:确认 mysqli 或 pdo_mysql 已启用(运行 php -m | grep -i mysqli 验证)
- SQL Server(sqlsrv):需安装 Microsoft ODBC Driver + php_sqlsrv.dll,且 extension=sqlsrv 在 php.ini 中生效
- PostgreSQL(postgre):检查 pgsql 扩展是否启用
- 特别注意:CI3 不支持 MySQL 8.0+ 默认的 caching_sha2_password 认证,需执行 ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pass';
连接失败时是否绕过了 hostname 解析陷阱
Linux 或 Docker 环境下,'localhost' 容易因 Unix socket 路径错误导致连接中断:
- 把 hostname 改为 '127.0.0.1',强制走 TCP/IP 协议
- Windows 下也建议统一使用 127.0.0.1,避免 hosts 解析歧义
- 若使用容器(如 MySQL 在独立容器),hostname 应填服务名(如 'mysql-db'),而非 localhost


















