You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAMPP环境中非root用户无法连接MySQL:登录验证权限问题排查

问题描述

我正在使用XAMPP设计一个带验证功能的测试登录页面。此前一直用root账号验证登录用户是否存在(尝试以登录用户身份连接时,用户不存在或密码不匹配会直接抛出致命错误),但root密码明文写在代码里有暴露风险,于是创建了仅拥有SELECT权限的新用户test_conn用于验证,运行代码时却抛出致命错误。

报错代码

$conn = new mysqli('localhost', "test_conn", "1234", "mysql");

错误信息

Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'test_conn'@'localhost' (using password: YES) in C:\[path]\sesion.php:41 Stack trace: #0 C:\[path]\sesion.php(41): mysqli->__construct('localhost', 'test_conn', Object(SensitiveParameterValue), 'mysql') #1 {main} thrown in C:\[path]\sesion.php on line 41

现有用户信息(phpMyAdmin查询,已简化)

Host   User    Password    Select_priv
%   test_conn   *A4B6157319038724E3560894F7F932C8886EBFCF   Y
localhost   test_conn       Y

已尝试的方案

  • 将localhost替换为127.0.0.1
  • 修改用户host字段为localhost(原用户host为%)
  • 将localhost替换为%

解决方案

从你提供的用户信息能看到,test_conn@localhost这个账号的Password字段是空的,但你代码里用了密码1234来连接,这就是权限拒绝的核心原因。

步骤1:修复test_conn@localhost的密码

在phpMyAdmin或者MySQL命令行中执行以下SQL,给localhost主机的test_conn设置正确的密码(对应你代码里的1234):

-- MySQL 5.x及以下版本
SET PASSWORD FOR 'test_conn'@'localhost' = PASSWORD('1234');
FLUSH PRIVILEGES;

如果你的XAMPP搭载的是MySQL 8.0+版本,用下面的语法:

ALTER USER 'test_conn'@'localhost' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;

步骤2:验证用户配置(可选)

执行以下SQL确认用户权限和密码是否正确:

SELECT Host, User, Password, Select_priv FROM mysql.user WHERE User = 'test_conn';

确保test_conn@localhost的Password字段不再为空,且Select_priv为Y。

步骤3:重新测试连接

修改完成后,再次运行你的PHP代码,即可正常建立连接。

另外建议保留test_conn@%账号(用于后续可能的远程连接需求),但也要确保它的密码配置正确,避免后续出现同类问题。

内容的提问来源于stack exchange,提问作者Koori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:47:18