PHP新手使用mysqli连接MySQL数据库时root用户及自定义用户均出现Access Denied错误求助
解决MySQL mysqli连接Access Denied错误的排查步骤
嘿,别着急!作为PHP新手遇到这种连接问题很正常,咱们一步步来排查这个Access Denied的问题:
1. 先检查代码里的密码参数(最容易忽略的点)
看你提供的代码,root用户的密码是空字符串:
$conn = new mysqli('localhost', 'root', '', 'dbname');
如果你的MySQL root用户是设置了密码的,这里空着肯定会报错!先确认root用户的密码,把正确的密码填进去试试,比如:
$conn = new mysqli('localhost', 'root', 'your_actual_root_password', 'dbname');
新用户的连接代码也要确保密码和你创建用户时设置的完全一致。
2. 检查MySQL用户的主机权限
MySQL的用户是「用户名@主机」的组合,比如root@localhost和root@127.0.0.1是两个独立的用户,权限不通用。
- 登录MySQL命令行(或者phpMyAdmin的SQL控制台),执行以下命令查看用户对应的主机:
SELECT user, host FROM mysql.user;
- 如果你的用户对应的主机是
localhost,那PHP里用localhost作为主机参数是对的;但如果MySQL是通过TCP/IP监听的,试试把主机改成127.0.0.1再连接。 - 要是你需要从任意主机连接(测试阶段可以用,生产环境不建议),可以给用户授权任意主机:
GRANT ALL PRIVILEGES ON dbname.* TO 'your_new_user'@'%' IDENTIFIED BY 'user_password'; FLUSH PRIVILEGES; -- 刷新权限让设置生效
3. 确认MySQL服务是否正常运行
有时候MySQL服务没启动也会抛出类似的错误:
- Linux系统可以用命令检查:
systemctl status mysql - Windows系统可以打开「服务」面板,找到MySQL服务确认它处于运行状态。
4. 刷新MySQL权限
你在phpMyAdmin里给用户授权后,可能需要手动刷新权限才能生效,执行这条SQL:
FLUSH PRIVILEGES;
5. 用命令行测试连接
先绕过PHP,直接用MySQL命令行测试用户能不能登录,这样可以排除PHP代码的问题:
- 测试root用户:
mysql -u root -p,输入密码后看能不能进入MySQL控制台 - 测试新用户:
mysql -u your_new_user -p -D dbname,同样看能不能成功登录并访问目标数据库
如果命令行能成功连接,那问题大概率出在PHP代码或者PHP的mysqli配置上;如果命令行也登不上,那就是MySQL用户的权限或密码设置有问题。
先从上面这几个步骤排查,应该能解决你的问题!
内容的提问来源于stack exchange,提问作者Darshan B
相关产品推荐
相关产品推荐

