数据库连接失败主因是php环境未就绪、mysql服务不可达或参数/驱动不匹配;需依次验证php -v与扩展加载、mysql命令行直连、以及认证插件兼容性,错误日志优先查php错误日志、iis日志和windows事件查看器。

数据库连接失败在 IIS + PHP 8.0.30 环境中,往往不是代码问题,而是环境链路断在了某一层。重点查三块:PHP 是否真能跑起来、MySQL 服务是否可达、连接参数与驱动是否对得上。
先确认 PHP 环境本身是通的
如果 PHP 连接数据库前就报 500 或空白页,说明连执行机会都没有。必须先验证基础运行环境:
- 命令行执行 php -v,确认输出 8.0.30;若报“不是内部或外部命令”,说明系统 PATH 没配或 php-cgi.exe 路径错误
- 执行 php --ini,看加载的是不是你改过的 C:\php\php.ini;很多问题出在改了错的 ini 文件
- 执行 php -m | findstr "mysqli pdo_mysql",确保两扩展都列出;没出现说明没启用,检查 php.ini 中 extension=php_mysqli.dll 和 extension=php_pdo_mysql.dll 是否取消注释且路径正确
- 在网站根目录放 test.php: —— 若页面只显示“PHP OK”不报错,说明连接语句被跳过,大概率是扩展没加载成功
检查 MySQL 服务状态与网络可达性
IIS 和 MySQL 可能在同一台机器,但默认配置仍可能拦住连接:
- 打开 Windows 服务管理器,确认 MySQL80(或你安装的服务名)处于“正在运行”状态;右键“重新启动”一次更稳妥
- 命令行执行 mysql -h 127.0.0.1 -P 3306 -u root -p,输入密码看能否登录;成功说明服务正常、端口开放、账号可用
- 若提示“Can't connect to MySQL server”,检查是否开了防火墙:临时关闭 Windows Defender 防火墙,或添加入站规则放行 TCP 3306 端口
- 别用 localhost 测试——Windows 下它可能走命名管道而非 TCP;统一用 127.0.0.1 排除歧义
核对连接参数与认证兼容性
PHP 8.0.30 默认支持 MySQL 8.0 的 caching_sha2_password 认证,但前提是 mysqli 扩展编译时启用了 OpenSSL。若仍报错 Client does not support authentication protocol,按此处理:
- 进 MySQL 命令行执行:ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
- 检查连接字符串中的 host、port、user、pass、dbname 是否和命令行测试一致;特别注意 .env 或 config 文件里是否有拼写错误(如 localhsot、passwrod)
- 密码含 @ / : 等特殊字符?需 URL 编码后填入 DSN;例如密码为 p@ss:w0rd,应写成 p%40ss%3Aw0rd
- 使用 mysqli 连接时,务必加上错误捕获:
看日志,而不是猜
IIS 不会把 PHP 连接错误直接吐给浏览器,真正线索藏在三处:
- IIS 日志:打开 C:\inetpub\logs\LogFiles\W3SVC1\u_ex261013.log(日期对应今天),找状态码 500 行,重点看 sc-substatus(如 19=FastCGI 崩溃)、sc-win32-status(如 5=权限不足)
- PHP 错误日志:在 php.ini 中确认 log_errors = On,并设置 error_log = "C:/php/logs/php_error.log";重启 IIS 后再试,该文件会记录 mysqli_connect 失败的具体原因
- Windows 事件查看器:路径为 Windows 日志 → 应用程序,筛选来源为“PHP”或“IIS-IIS Manager”,常有 FastCGI 启动失败、DLL 加载失败等底层报错
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











