phpstudy中MySQL无法被PHP调用本质是连接链路中断,需依次验证服务状态、网络配置(bind-address/port)、PHP扩展与认证兼容性、用户权限四环节,任一不匹配即报错。

phpstudy中MySQL无法被PHP程序正常调用,本质不是“MySQL没启动”,而是连接链路中断——从PHP脚本发起请求,到真正连上数据库,中间涉及服务状态、网络配置、认证参数、驱动支持四个关键环节。只要其中一环不匹配,就会出现“Connection refused”“Access denied”或“mysqli_connect(): (HY000/2002)”等报错。
确认MySQL服务已就绪且可本地访问
这是联动的前提。不能只看phpstudy面板显示“绿色”,要验证真实可用性:
- 打开 Windows 服务管理器(Win+R → services.msc),找到服务名含 mysql 或 phpstudy_mysql 的项,确认状态为“正在运行”
- 在命令行执行:
mysql -u root -p,输入默认密码(如为空则直接回车;常见默认密码为root或留空),能进入 MySQL 命令行即说明服务本身可响应 - 若失败,先别动PHP代码——立即排查端口占用(
netstat -ano | findstr :3306)和服务冲突(如本机已装独立MySQL,服务名同为MySQL)
检查PHP连接方式与MySQL绑定配置是否一致
很多PHP程序用 localhost 连接,但MySQL的 my.ini 若设置了 bind-address = 127.0.0.1,而PHP又启用了 Unix socket(Windows下极少),就可能绕过TCP导致失败。稳妥做法是统一走IP:
- 打开
my.ini(路径类似:D:\phpstudy_pro\Extensions\MySQL8.0.33\conf\my.ini),确保[mysqld]段落中存在:bind-address = 127.0.0.1port = 3306(或你自定义的端口) - PHP连接时,显式使用
127.0.0.1而非localhost,例如:$conn = mysqli_connect('127.0.0.1', 'root', 'your_pass', 'testdb', 3306); - 若用PDO,DSN也应写为:
mysql:host=127.0.0.1;port=3306;dbname=testdb
验证PHP已启用对应数据库扩展并兼容版本
phpstudy切换PHP版本后,常出现 mysqli 或 pdo_mysql 扩展未自动启用,或MySQL服务版本(如8.0+)与PHP内置客户端不兼容(尤其旧版PHP对 caching_sha2_password 认证不支持):
立即学习“PHP免费学习笔记(深入)”;
- 在phpstudy面板中点击当前PHP版本右侧的“设置”→“PHP扩展”,勾选 mysqli 和 PDO MySQL,保存后重启Apache
- 新建一个
info.php文件,内容为<?php phpinfo(); ?>,浏览器访问,搜索mysqli和PDO,确认已加载 - 若MySQL是8.0.4+且PHP版本 ≤ 7.2,登录MySQL后执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass';
再刷新权限:FLUSH PRIVILEGES;
排除防火墙与用户权限干扰
即使本地连接,Windows防火墙有时也会拦截 loopback 流量;同时,MySQL的 root@localhost 用户默认可能禁止远程(虽本地也算“远程”逻辑):
- 临时关闭Windows防火墙测试,或添加入站规则放行 TCP 端口 3306
- 用管理员CMD登录MySQL:
mysql -u root -p,执行:SELECT host, user FROM mysql.user;
确认存在localhost对应的root行;若只有127.0.0.1,则补一条:CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_pass';GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;



















