PHP探针数据库连接失败主因是参数不匹配或环境配置问题:host误用localhost、端口未显式指定、数据库未创建、权限不足、扩展未启用、MySQL 8+认证插件不兼容、防火墙/SELinux拦截、探针自身超时或缓存缺陷。

数据库连接参数是否匹配真实环境
PHP探针本身不负责建库或授权,它只是用你填的配置去尝试连接。常见问题是 host 填了 localhost 却实际要用 127.0.0.1(尤其 MySQL 8+ 默认禁用 localhost 的 socket 连接),或者端口不是默认的 3306 却没在 host 后加 :端口号。
检查点包括:
-
username和password是否与 phpMyAdmin 或命令行登录一致 -
database名是否已真实创建(探针不会自动建库) - 如果用 Docker 或云数据库,
host不能写localhost,得填容器名、内网 IP 或公网地址 - MySQL 用户权限是否包含从当前 PHP 所在主机(如
%或具体 IP)连接
PHP 是否启用了对应数据库扩展
探针依赖 mysqli 或 PDO 扩展,但很多精简版 PHP 环境默认不启用。运行 php -m | grep -i mysql 查看是否列出 mysqli 或 pdo_mysql;若无,需编辑 php.ini,取消以下行的注释:
extension=mysqli extension=pdo_mysql
改完后重启 Web 服务(如 systemctl restart apache2 或 nginx + PHP-FPM)。注意:有些探针只认 mysqli,即使开了 PDO 也不行。
立即学习“PHP免费学习笔记(深入)”;
错误信息里出现 “Access denied” 但账号密码没错
这大概率是 MySQL 用户认证插件不兼容。MySQL 8.0+ 默认用 caching_sha2_password,而旧版 PHP 的 mysqli 扩展可能不支持。解决方法是重置用户认证方式:
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
执行后刷新权限:FLUSH PRIVILEGES;。也可在创建用户时直接指定:CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'p';
其他线索:
- 错误含
Connection refused→ 检查 MySQL 是否运行、端口是否监听(netstat -tlnp | grep :3306) - 错误含
Unknown MySQL server host→ DNS 解析失败,换 IP 或检查/etc/hosts - SELinux 或防火墙拦截(CentOS/RHEL 上常见)→ 临时关 SELinux 测试:
setenforce 0
探针脚本自身限制或缓存干扰
部分老版本探针(如雅黑 PHP 探针)硬编码了超时为 2 秒,遇到高延迟数据库就直接报错;也有探针会缓存上一次连接结果,改完配置后仍显示旧错误。
建议操作:
- 手动在探针目录下新建一个测试文件,比如
test_db.php,用最简代码验证:
能跑通说明探针本身有问题,可考虑换用新版探针或直接弃用——毕竟它只是辅助工具,不是诊断必需品。
真正容易被忽略的是:有些探针把数据库检测和“系统信息”放在一起,而后者读取失败(如 /proc/meminfo 权限不足)会导致整个页面中断,看起来像数据库连不上。这时候要看浏览器开发者工具 Network 面板里具体哪个请求失败,而不是只盯探针界面上的红叉。











