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

使用XAMPP连接PHP数据库报错SQLSTATE[HY000][1045],求解决方法

解决PHP连接MySQL出现SQLSTATE[HY000] [1045]权限错误的方案

问题描述

连接数据库时抛出错误:

Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'test'@'localhost' (using password: YES)

使用的PHP连接代码:

<?php

$sname = 'localhost';   //server name properties name any
$user = 'root';   //server username 
$pass = '';   //server password
$db = 'database_new';   //database name

$db = new mysqli ('localhost', $user, $pass, $db) or die ("unable to connect");
echo "Successfully Connected";

?>

已检查XAMPP本地用户账户,未发现异常,但问题仍存在。

排查与解决步骤

  • 核对代码与错误提示的用户一致性
    错误提示中被拒绝的是test用户,但代码里使用的是root用户,需确认:

    • 当前运行的PHP文件是否为你修改后的版本,避免打开了错误的文件
    • 清理浏览器缓存或重启XAMPP的Apache服务,排除旧代码缓存问题
  • 验证root用户的登录权限
    打开XAMPP的phpMyAdmin,用root用户(空密码)登录,执行以下SQL语句检查权限:

    SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';
    
    • 确保host列包含localhost或%(允许所有地址访问)
    • 如果root用户的密码被修改过,同步修正代码中的$pass值
  • 确认目标数据库存在
    在phpMyAdmin中检查是否存在名为database_new的数据库,避免代码中数据库名称拼写错误

  • 重置root用户权限(若上述步骤无效)

    1. 停止XAMPP的MySQL服务,打开命令行进入XAMPP的MySQL目录(通常为xampp/mysql/bin),执行:
      mysqld.exe --skip-grant-tables
      
    2. 打开新的命令行窗口,进入同一目录,执行:
      mysql.exe -u root
      
    3. 执行SQL重置root用户权限(空密码):
      USE mysql;
      UPDATE user SET authentication_string='' WHERE user='root' AND host='localhost';
      FLUSH PRIVILEGES;
      EXIT;
      
    4. 关闭所有命令行窗口,重启XAMPP的MySQL服务后重新测试连接
  • 检查端口拦截情况
    暂时关闭本地防火墙或安全软件,确认是否存在MySQL 3306端口被拦截的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 00:21:04