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

PHP连接XAMPP数据库报错排查请求:附错误信息及代码

排查PHP登录表单数据库连接及SQL错误

先逐个拆解你遇到的问题,再给出针对性的修正方案:

1. 数据库连接权限错误(Warning: mysqli_connect(): (HY000/1045))

这个错误的核心是账号权限不匹配:错误提示明确说root@localhost被拒绝访问,且标注了using password: YES,但你的代码里$password是空字符串""。这说明你的MySQL服务中root账号是设置了密码的,而你代码里填写的密码和实际数据库密码不匹配。

解决方法:

  • 找到你MySQL root账号的真实密码,把代码里的$password改成正确值,比如密码是123456,就写$password = "123456";
  • 如果你确实没给root设密码,检查XAMPP的MySQL配置文件,确认是否允许无密码登录,或者重启MySQL服务尝试。

2. 连接失败后调用对象方法的错误(Notice: Trying to get property of non-object、Fatal error: Call to a member function query() on boolean)

当mysqli_connect连接失败时,它返回的是布尔值false,而不是数据库连接对象。你后续用$conn->connect_error、$conn->query()这种对象调用方式,自然会报错——因为false不是对象,没有这些属性和方法。

修正方法:
先判断连接是否成功,再执行后续逻辑,改用面向过程的写法更稳妥:

// 检查连接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

这样连接失败时会直接终止程序,避免后续代码触发更多错误。

3. SQL INSERT语句语法错误

你的SQL语句INSERT INTO sign_in (username,password)是不完整的,缺少VALUES子句——INSERT必须指定要插入的具体值才能执行。假设你是从登录表单获取数据,可以这样写:

// 先转义表单数据防止SQL注入
$form_username = mysqli_real_escape_string($conn, $_POST['username']);
$form_password = mysqli_real_escape_string($conn, $_POST['password']);
// 完整的INSERT语句
$sql = "INSERT INTO sign_in (username,password) VALUES ('$form_username', '$form_password')";

如果只是测试,也可以写固定值:INSERT INTO sign_in (username,password) VALUES ('test_user', 'test_pass')

修正后的完整代码

<?php
$servername = "localhost";
$username = "root";
$password = "你的实际数据库密码"; // 替换成正确的密码
$dbname = "myproject";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// 处理表单数据(假设表单用POST提交)
$form_username = mysqli_real_escape_string($conn, $_POST['username']);
$form_password = mysqli_real_escape_string($conn, $_POST['password']);

// 构造完整的SQL语句
$sql = "INSERT INTO sign_in (username,password) VALUES ('$form_username', '$form_password')";

if (mysqli_query($conn, $sql)) {
    echo "New record inserted successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

// 关闭连接
mysqli_close($conn);
?>

额外提醒:生产环境中更推荐用预处理语句来彻底防范SQL注入,示例代码如下:

$stmt = $conn->prepare("INSERT INTO sign_in (username,password) VALUES (?, ?)");
$stmt->bind_param("ss", $form_username, $form_password); // "ss"表示两个字符串类型参数
$stmt->execute();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:33:38