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
相关产品推荐
相关产品推荐

