Windows 7下PHP连接MySQL失败,90%源于环境链路默认值错配;应按MySQL用户权限→连接地址解析→PHP扩展与认证插件兼容性→Apache加载路径顺序排查,重点验证host匹配、caching_sha2_password插件兼容性、php_mysqli.dll加载及vc_redist依赖。

Windows 7 下 PHP 连接 MySQL 失败,90% 的情况不是代码写错,而是环境链路上某处“默认值”和“实际行为”对不上。重点排查顺序是:MySQL 用户权限 → 连接地址解析 → PHP 扩展与认证插件兼容性 → Apache 加载路径。
mysql_connect() 或 mysqli_connect() 报错“Access denied for user”
这是最典型的 1045 错误,表面是密码错,实则多为权限或主机匹配问题。
- 先确认 MySQL 中该用户是否真能从 PHP 所用地址登录:在命令行执行
mysql -u your_user -h 127.0.0.1 -p和mysql -u your_user -h localhost -p,两者可能一个通、一个不通 —— Windows 7 默认localhost解析为 IPv6 的::1,而 MySQL 用户'user'@'localhost'和'user'@'127.0.0.1'是两个独立账户 - 检查用户 Host 字段:
SELECT User, Host FROM mysql.user WHERE User = 'your_user';,若只返回localhost,但 PHP 配置里写的是127.0.0.1,就必须补一条:CREATE USER 'your_user'@'127.0.0.1' IDENTIFIED BY 'xxx'; GRANT ALL ON *.* TO 'your_user'@'127.0.0.1'; FLUSH PRIVILEGES; - MySQL 8.0+ 用户默认用
caching_sha2_password插件,老版 PHP(如 php 7.2 及更早)的mysqlnd不支持,必须改插件:ALTER USER 'your_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx';
PHP 报错“Call to undefined function mysqli_connect()”
说明 PHP 没加载 MySQL 相关扩展,不是函数名拼错。
- 确认
php.ini中已取消注释:extension=php_mysqli.dll(注意不是php_mysql.dll,后者在 PHP 7+ 已移除) - 检查
extension_dir路径是否正确指向 PHP 的ext目录,例如:extension_dir = "D:/php7/ext";路径错误会导致扩展加载失败但无明显报错 - Apache 启动时若用的是 VC14 编译的 PHP(如 PHP 7.1+),必须提前装好
vc_redist.x64.exe或vc_redist.x86.exe,否则php_mysqli.dll依赖的运行库缺失,Apache 服务会静默失败 - 重启 Apache 后,访问
phpinfo.php页面,搜索 “mysqli”,确认模块已启用且版本显示正常
Apache 访问 PHP 页面时连接被重置(ERR_CONNECTION_RESET)
这不是数据库层错误,是 Apache 在调用 PHP 过程中崩溃或中断,常见于 DLL 加载冲突。
立即学习“PHP免费学习笔记(深入)”;
- 检查
httpd.conf中LoadModule行是否指向了正确的php7apache2_4.dll(对应 Apache 2.4)或php5apache2_2.dll(对应 Apache 2.2)—— 版本错配会导致 Apache 启动后立即崩溃 - Windows 7 系统下,Apache 必须显式加载 MySQL 的客户端 DLL:
LoadFile "D:/php7/libmysql.dll"或LoadFile "D:/php7/libmysqli.dll"(路径按实际调整),否则即使扩展加载成功,首次调用连接时也会触发进程重置 - 确认
php.ini中extension_dir和extension=php_mysqli.dll的路径不包含中文或空格,Apache 对这类路径解析不稳定
真正卡住人的地方,往往不在“怎么做”,而在“谁在用哪个协议、哪个插件、哪个 DLL”。Windows 7 的网络栈、MySQL 的 Host 匹配逻辑、PHP 扩展的 VC 运行时依赖,三者叠在一起,任何一个默认值偏移都会让连接无声失败。动手前先跑一遍 mysql -h 127.0.0.1 -u root -p 和 php -m | findstr mysqli,比直接改代码管用得多。



















