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

SQLSTATE[HY000] [1045]访问拒绝:可直接登录MySQL但网页连接失败

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

可按以下顺序排查解决:

  • 核对普通账号的授权主机配置
    登录MySQL后执行命令查看账号信息:
    SELECT user,host FROM mysql.user WHERE user='替换为你的普通账号名';
    如果返回结果中host字段的值不是localhost,仅为127.0.0.1、%或其他值,说明PHP连接使用的主机标识和账号授权的主机不匹配,有两种修复方案:

    • 修改PHP数据库配置的主机地址为127.0.0.1,替代原来的localhost后重试
    • 给普通账号追加localhost授权,执行以下命令(替换为实际的账号、密码、要访问的数据库名):
      GRANT ALL PRIVILEGES ON 目标数据库名.* TO '你的普通账号'@'localhost' IDENTIFIED BY '普通账号的密码';
      FLUSH PRIVILEGES;
      
  • 检查PHP配置的密码准确性
    复制粘贴密码时容易带入多余的空格、换行符,或者编码转换导致异常,可在PHP连接数据库的代码前临时添加var_dump($password变量);exit;,将输出结果和命令行登录使用的密码逐位对比,确认完全一致。

  • 显式指定MySQL socket路径
    本地集成环境(如XAMPP、MAMP、宝塔面板本地版)常使用自定义的MySQL socket路径,root账号不受路径限制可正常连接,普通账号可能因此被拦截:
    登录MySQL执行show variables like 'socket';获取实际socket路径,之后在PHP的数据库连接配置中追加该参数即可,以PDO连接为例:
    new PDO('mysql:host=localhost;dbname=你的库名;unix_socket=查询到的socket路径', '账号', '密码');

  • 清理MySQL匿名用户
    如果MySQL中存在''@'localhost'的匿名用户,权限匹配时会优先命中匿名用户规则,导致普通账号登录被拒绝,执行以下命令清理即可:

    DELETE FROM mysql.user WHERE user='';
    FLUSH PRIVILEGES;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:48:03