连不上数据库多数因配置或环境问题:①hostname用localhost导致unix socket路径错误,应改用127.0.0.1;②php未启用mysqli/pdo_mysql扩展;③mysql 8.0+认证插件不兼容旧php;④共享主机用户名/库名需加账户前缀且权限未正确分配。

连不上数据库,八成不是框架坏了,而是配置、环境或驱动没对齐。别急着重装,按顺序查这四个关键点,多数问题当场解决。
检查 hostname 是不是写成了 localhost
Linux 或 Docker 环境下,localhost 会强制走 Unix socket,但 PHP 往往找不到 mysqld.sock 路径(比如 /var/run/mysqld/mysqld.sock),直接报错 “No such file or directory”。
解决办法很简单:把 config/database.php 里的
'hostname' => 'localhost',
改成
'hostname' => '127.0.0.1',
强制走 TCP/IP 连接,绕过 socket 路径问题。Windows 和共享主机(如 Namecheap)也建议统一用 127.0.0.1,避免解析歧义。
确认 PHP 数据库扩展已启用且版本兼容
CI 报 “Unable to connect”,但账号密码都对?大概率是 mysqli 或 pdo_mysql 根本没加载。
- 终端运行 php --ini 查看实际生效的 php.ini 路径(注意 CLI 和 Web 服务器可能加载不同配置)
- 运行 php -m | grep -i mysqli(Linux/macOS)或 php -m | findstr mysqli(Windows),确认 mysqli 在扩展列表里
- Windows 下确保 php.ini 里写的是 extension=php_mysqli.dll,不是 extension=mysqli
- MySQL 8.0+ 默认用 caching_sha2_password 认证,旧版 PHP(如 7.2 以下)不支持。临时解法:登录 MySQL 执行
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
验证数据库用户权限和命名规则
尤其在共享主机(如 Namecheap、cPanel)上,新手常栽在这里:
- 数据库名、用户名必须带 cPanel 账户前缀,比如你用户名是
abc123,本地建库叫ci4_db,上线就得写成abc123_ci4_db - 去 cPanel 的「MySQL Databases」页面,找到你创建的用户,手动把它添加到对应数据库中,并勾选至少 SELECT/INSERT/UPDATE/DELETE 权限
- 别忽略密码大小写和特殊字符——复制粘贴时容易漏掉末尾空格或换行
写个裸连脚本,先绕过 CI 框架验证
在网站根目录新建 test_db.php,内容如下:
$conn = mysqli_connect("127.0.0.1", "yourusername_user", "yourpass", "yourusername_db");
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
echo "裸连成功!";
mysqli_close($conn);
?>
用浏览器访问这个文件:
- 如果报错 → 说明是数据库本身的问题(信息错、权限没开、网络不通),跟 CI 无关
- 如果显示“裸连成功” → 问题一定出在 CI 的配置(.env 或 database.php)、项目结构(路径不对导致配置没加载)、或自动加载逻辑上











