注意:在第 XX 行尝试访问 bool 类型值的数组偏移量

Notice: Trying to access array offset on value of type bool in line XX

Trying to access array offset on value of type bool in line 88

Trying to access array offset on value of type bool in line 91

我在下面标记了这些行,我试图更改查询以防万一,但它似乎不起作用。我查了一下,但找不到解决方案。我还注意到所有这些答案都被否决了,但我是 PHP 的新手,所以我真的不知道要寻找什么。我想这很简单,但我只是没有找到正确的地方。为什么会这样?我该如何解决?

$number = rand(pow(10, 11-1), pow(10, 11)-1);
$stmt = mysqli_prepare($db, "SELECT * FROM accounts WHERE email= ? OR number= ? LIMIT 1");
mysqli_stmt_bind_param($stmt, "ss", $email, $number);
mysqli_stmt_execute($stmt);

$user = mysqli_stmt_fetch($stmt);

function uniqueNum() {
    global $number;
    $number = rand(pow(10, 11-1), pow(10, 11)-1);
    if ($user['number'] === $number) {
        uniqueNum();
    }
}

if ($user) {
    if ($user['email'] === $email) { // Line 88
        array_push($errors, "E-Mail already exists");
    }
    if ($user['number'] === $number) { // Line 91
        uniqueNum();
    }
}

感谢任何形式的帮助!我今年 15 岁,刚开始学习如何填写注册表,所以我很乐意听取一些额外的建议!

您将 PDO 与 mysqli 混淆了。 Mysqli 要复杂得多,mysqli_stmt_fetch 实际上 return 没有任何值。如果您使用 get_result 和 OOP 风格,您可以使这更简单。然后,您可以使用 fetch_assoc() 从结果对象中获取一行。

$stmt = $db->prepare("SELECT * FROM accounts WHERE email= ? OR number= ? LIMIT 1");
$stmt->bind_param("ss", $email, $number);
$stmt->execute();
$user = $stmt->get_result()->fetch_assoc();

if($user) {
    if ($user['email'] === $email) {
        array_push($errors, "E-Mail already exists");
    }
    if ($user['number'] === $number) {
        uniqueNum();
    }
}