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

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用户的权限设置:

  1. 打开XAMPP的phpMyAdmin(或者用MySQL命令行,用root用户登录)
  2. 检查是否存在user@localhost用户:执行SQL语句
    SELECT user, host FROM mysql.user;
    
  3. 如果不存在这个用户,创建并授权:
    CREATE USER 'user'@'localhost' IDENTIFIED BY 'debashree';
    -- 如果你只需要访问特定数据库,把*.*换成`你的数据库名`.*
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
    FLUSH PRIVILEGES;
    
  4. 如果用户存在但密码不对,重置密码:
    ALTER USER 'user'@'localhost' IDENTIFIED BY 'debashree';
    FLUSH PRIVILEGES;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:20:51