WAMP中MySQL连接失败主因是服务未运行、host配置错误(应写127.0.0.1而非localhost)或root用户Host权限不匹配(需设为127.0.0.1并FLUSH PRIVILEGES)。

WAMP 环境里的 MySQL 默认是本地运行、端口 3306、用户 root、密码为空——这是 PHP 能连上的前提。如果连不上,八成不是代码问题,而是服务没启、权限没开、或配置写错了。
确认 WAMP 的 MySQL 服务真在运行
点开系统托盘的 WAMP 图标,看是否显示绿色;若为橙色或红色,说明 MySQL 没启动。右键图标 → MySQL → Service → Start/Resume Service。别只靠浏览器能打开 phpMyAdmin 就以为 MySQL 在跑——phpMyAdmin 有时会缓存连接状态,实际服务可能已崩。
- 检查 Windows 服务列表里是否有
wampmysqld64(或类似名称),状态必须是“正在运行” - 打开命令行执行
netstat -ano | findstr :3306,有输出才表示端口被占用且服务监听中 - 如果端口被其他程序(如 Docker、另一个 MySQL 实例)占了,WAMP 启动会失败但不报错,得手动改
my.ini中的port
PHP 连接时用对 host 和 socket
本地开发别写 localhost——它在某些 PHP 版本(尤其启用了 IPv6 的系统)会走 IPv6 回环,而 MySQL 默认只监听 IPv4 的 127.0.0.1,导致连接超时。直接写 127.0.0.1 最稳。
-
mysqli_connect('127.0.0.1', 'root', '', 'test')✅ -
mysqli_connect('localhost', 'root', '', 'test')❌(可能失败) - 用 PDO 时也一样:
new PDO('mysql:host=127.0.0.1;dbname=test', 'root', '') - Windows 下不用管
socket参数,WAMP 的 MySQL 不依赖 Unix socket 文件
检查 php.ini 是否启用 mysqlnd 扩展
WAMP 自带的 PHP 默认已开启 mysqli 和 pdo_mysql,但如果你手动改过 php.ini 或切换过 PHP 版本,可能被关掉。访问 http://localhost/phpinfo.php,搜索 mysqli 和 PDO drivers,确认里面有 mysql。
立即学习“PHP免费学习笔记(深入)”;
- 若没看到,打开 WAMP 界面 → PHP → PHP Extensions,勾选
mysqli和pdo_mysql - 改完要重启所有 WAMP 服务(不是只重启 Apache)
- 别去手动编辑
php.ini解开extension=php_mysqli.dll这类行——WAMP 的扩展管理器会自动处理路径和开关
权限问题:root 用户默认只允许本地连接
WAMP 的 MySQL root 用户默认 host 是 127.0.0.1 或 localhost,但 PHP 连接时若 host 写成 127.0.0.1,而用户记录里 host 是 localhost,某些 MySQL 版本会拒绝(因 localhost 在 MySQL 里有特殊含义,走 socket 而非 TCP)。最简单解法:用 phpMyAdmin 登录后,进 user 表,把 root 对应的 Host 字段改成 % 或 127.0.0.1,再刷新权限。
- 执行 SQL:
UPDATE mysql.user SET Host='127.0.0.1' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES; - 改完必须执行
FLUSH PRIVILEGES;,否则不生效 - 生产环境绝不能设
%,但本地开发设127.0.0.1安全且兼容性最好
真正卡住的地方往往不在 PHP 代码本身,而在 MySQL 服务状态、host 解析逻辑、或权限记录里的 Host 值是否匹配——这三个点核对完,95% 的连接问题就解决了。











