核心是分清“连不上”和“连得上但查不到”:先显形错误(开启display_errors或查PDOException message),再逐层验证网络、权限、配置及驱动兼容性。

PHP平台数据库连接失败,核心是分清“连不上”和“连得上但查不到”。先让错误显形,再逐层验证网络、权限、配置和兼容性。
看报错信息里的关键词
打开 PHP 错误日志或临时开启 display_errors,重点盯住 PDOException message 字段:
- Connection refused → MySQL 服务没启动,或 host/port 不通(比如 Docker 没暴露 3306 端口)
- Access denied for user → 账号密码错,或该用户只允许从 localhost 连,而 PHP 运行在容器/Nginx 中
- No such file or directory → 配置用了 localhost,但 MySQL 没启用 socket,或路径不对(Mac M1 Homebrew 常见)
- Authentication plugin 'caching_sha2_password' → MySQL 8.0+ 默认认证方式,PHP 版本偏低不支持
用命令行直连验证服务状态
别只改代码,先在服务器或容器里执行:
-
mysql -h 127.0.0.1 -P 3306 -u root -p—— 成功说明服务、账号、端口都 OK -
telnet 127.0.0.1 3306或nc -zv 127.0.0.1 3306—— 判断端口是否可达 - Docker 环境换
-h mysql(容器名)或-h host.docker.internal(宿主机)
检查 PHP 配置是否生效
常见失效原因不是写错了,而是没加载:
-
.env必须放在项目根目录(和think命令同级),不能在config/或app/下 -
APP_DEBUG=true必须开启,否则环境变量加载逻辑被跳过 - 键名必须全大写+下划线,如
DB_HOST=127.0.0.1;db_host或Db_Host都无效 - 临时加一行
dump(env('DB_HOST'));,输出 null 就说明上面某条不满足
确认驱动与认证兼容性
PHP 8.0 默认启用异常模式,老代码容易崩,且认证插件不匹配更易暴露:
- PHP 8.0 的 PDO 默认抛异常,不再静默返回 false,需用 try/catch 接住并打印完整信息
- MySQL 8.0+ 用户若显示
caching_sha2_password,执行:ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass'; FLUSH PRIVILEGES; - 检查
php -m | grep pdo确认pdo_mysql已启用 - 云服务器注意安全组放行 3306,且用户 host 字段不能是
localhost(远程连不进)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











