PHP应用通过Plesk服务器连接MySQL时触发1045权限错误
解决Plesk服务器上PHP连接MySQL的1045权限错误
问题根源
错误SQLSTATE[HY000] [1045] Access denied for user 'TESTE'@'localhost'的核心矛盾:代码指定了公网IP作为数据库主机,但MySQL识别到的请求来源是localhost。这通常和Plesk环境下的数据库用户权限配置、本地连接规则有关。
分步解决方案
1. 检查数据库用户的访问权限
在Plesk面板操作:
- 进入目标数据库
teste_whats的管理界面,找到用户teste - 查看允许访问的主机设置:
- 若应用和数据库在同一服务器,需确保用户
teste允许从localhost或127.0.0.1访问 - 若应用在外部服务器,需将允许访问的主机设为
%(允许所有IP)或应用所在服务器的具体IP
- 若应用和数据库在同一服务器,需确保用户
- 确认用户
teste@localhost(或对应允许的主机)存在,且密码与代码中一致
2. 调整数据库连接参数
如果应用和数据库部署在同一Plesk服务器,直接将DBHOST改为localhost或127.0.0.1,这是Plesk环境下本地数据库连接的标准方式:
const DBCONNECTION = 'mysql'; const DBHOST = 'localhost'; // 或127.0.0.1 const DBNAME = 'teste_whats'; const DBUSER = 'teste'; const DBPASS = 'teste'; $connPdo = new \PDO(DBCONNECTION.': host='.DBHOST.'; dbname='.DBNAME, DBUSER, DBPASS);
3. 验证Plesk数据库状态
- 确认
teste_whats数据库状态正常,未被Plesk锁定 - 核对数据库用户
teste的密码,注意MySQL用户名和密码默认区分大小写
4. 调试连接的辅助脚本
在服务器上创建测试脚本,输出完整错误信息,帮助定位问题:
try { const DBCONNECTION = 'mysql'; const DBHOST = '112.115.225.365'; const DBNAME = 'teste_whats'; const DBUSER = 'teste'; const DBPASS = 'teste'; $connPdo = new \PDO(DBCONNECTION.': host='.DBHOST.'; dbname='.DBNAME, DBUSER, DBPASS); $connPdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); echo "数据库连接成功"; } catch (\PDOException $e) { echo "错误详情: " . $e->getMessage(); }
内容的提问来源于stack exchange,提问作者Kadu Lopes
相关产品推荐
相关产品推荐

