PHP连接MySQL服务器报错求助:Access denied及非对象属性问题
问题拆解与解决方案
咱们逐个分析你遇到的两个报错,再一步步修正你的脚本:
1. 权限拒绝警告(Warning: mysqli_connect(): (HY000/1045))
这个是MySQL最常见的权限类错误,直白点说:你用的用户名user和密码debashree,没办法从localhost这个地址登录到你的MySQL服务。可能的原因有这几个:
- MySQL里根本不存在
user@localhost这个用户(注意MySQL的用户是「用户名+主机」的组合,user@%和user@localhost是两个完全不同的用户) - 密码写错了(比如大小写、特殊字符输入错误,或者你之前修改过密码但脚本里没同步更新)
user用户没有被授权从localhost访问数据库
2. 非对象属性访问提示(Notice: Trying to get property of non-object)
当mysqli_connect()连接失败时,它返回的是布尔值false,不是一个mysqli对象。你后面写的$connect->connect_error是在试图访问一个非对象的属性,这就触发了这个提示。而且正因为这个判断逻辑有问题,连接失败时die()根本没执行,所以你才会错误看到connected successfully的输出。
修正后的脚本
给你两种正确的写法,选一种用就行:
写法一:面向对象风格
<?php $host = "localhost"; $user = "user"; $password = "debashree"; // 用mysqli类实例化,连接失败时会自动设置connect_errno属性 $connect = new mysqli($host, $user, $password); // 先判断连接是否出错 if ($connect->connect_errno) { die("Connection failed: " . $connect->connect_error); } echo "Connected successfully"; ?>
写法二:面向过程风格
<?php $host = "localhost"; $user = "user"; $password = "debashree"; $connect = mysqli_connect($host, $user, $password); // 先判断连接是否成功(失败时返回false) if (!$connect) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?>
权限问题的排查步骤
解决第一个报错,你需要确认MySQL用户的权限设置:
- 打开XAMPP的phpMyAdmin(或者用MySQL命令行,用root用户登录)
- 检查是否存在
user@localhost用户:执行SQL语句SELECT user, host FROM mysql.user; - 如果不存在这个用户,创建并授权:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'debashree'; -- 如果你只需要访问特定数据库,把*.*换成`你的数据库名`.* GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost'; FLUSH PRIVILEGES; - 如果用户存在但密码不对,重置密码:
ALTER USER 'user'@'localhost' IDENTIFIED BY 'debashree'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者Debashree Bardhan
相关产品推荐
相关产品推荐

