php数据库连接失败需从服务状态、连接参数、用户权限、php配置四方面排查:先确认mysql服务运行及端口可用,再核对host/port/账号密码,检查用户授权与bind-address设置,最后确保php扩展启用并开启错误提示。

PHP 数据库连接失败,通常不是单一原因导致的,而是几个关键环节中某一处出了问题。快速定位需从配置、环境、权限和网络四方面逐层检查。
数据库服务是否正常运行
最基础却最容易被忽略的一点:MySQL(或 PostgreSQL、SQLite 等)服务本身是否启动?
- Linux 下执行 systemctl status mysql 或 service mysqld status 查看服务状态
- Windows 下检查“服务”管理器中 MySQL 是否为“正在运行”
- 尝试用命令行客户端直连:mysql -u root -p,若连不上,说明服务未就绪或端口被占
连接参数是否准确无误
PHP 中调用 mysqli_connect() 或 PDO 构造时传入的 host、port、username、password、dbname 必须与实际一致,尤其注意:
- host 写成 'localhost' 和 '127.0.0.1' 在某些配置下行为不同(前者可能走 Unix socket,后者走 TCP)
- port 默认是 3306,若修改过需显式指定,例如:mysqli_connect('127.0.0.1', 'user', 'pass', 'db', 3307)
- 用户名密码大小写敏感,且 MySQL 8.0+ 默认使用 caching_sha2_password 认证插件,旧版 PHP 可能不兼容,可临时改用 mysql_native_password
用户权限与访问限制
即使账号密码正确,也可能因权限不足或主机限制被拒绝:
立即学习“PHP免费学习笔记(深入)”;
- 登录 MySQL 后执行:SELECT User, Host FROM mysql.user; 确认该用户允许从当前 PHP 所在主机连接(如 'user'@'localhost' 无法从 Docker 容器或远程 IP 连接)
- 必要时授权:GRANT ALL ON mydb.* TO 'user'@'%' IDENTIFIED BY 'pass'; FLUSH PRIVILEGES;
- 检查 MySQL 配置文件(my.cnf)中 bind-address 是否为 127.0.0.1(仅本地)或 0.0.0.0(允许远程),修改后需重启服务
PHP 扩展与错误提示是否开启
连接失败却看不到具体报错?很可能是错误抑制或扩展未启用:
- 确认 php.ini 中已启用扩展:extension=mysqli(或 extension=pdo_mysql),重启 Web 服务(Apache/Nginx + PHP-FPM)
- 开发环境中务必开启错误显示:error_reporting(E_ALL); ini_set('display_errors', 1);
- 使用 mysqli_connect_error() 或 $pdo->errorInfo() 主动捕获并输出错误信息,比静默失败更有价值











