Mysql 查询总是返回 true

Mysql query always returning true

所以我正在尝试使用 mysqli 查询检查用户是否被禁止,但似乎总是 return 该用户被禁止。即使他们没有被禁止。

user_banned 函数

function user_banned ($con, $username) {
    $data = $username;
    $username = sanitize($data, $con); 
    $username = $data;
    mysqli_query($con, "SELECT `banned` FROM `users` WHERE `username` = '$username'");
    return(mysqli_affected_rows($con) == 1) ? true : false;
}

调用函数的地方:

$username = $_POST['username'];
$password = $_POST['password'];

if (user_banned($con, $username) === true ) {
    $errors[] = 'You are banned, contact an admin.';
}

我已经回显了 $username,它是正确的用户名,所以这不是问题所在。

TL;dr 函数由于某种原因总是 return 为真。

您没有检查 banned 的值,您只是选择一行并返回 true(如果存在)。您需要添加一个 where 子句来检查 banned 的值或在 php 中检查它并决定用户是否被禁止

mysqli_affected_rows() 用于插入和更新。你想要 mysqli_num_rows().

如果碰巧超过 1 行,您当前的逻辑将 return 错误,因此这可能更有意义:

return(mysqli_affected_rows($con) != 0) ? true : false;
//or even
return (bool)mysqli_affected_rows($con);

还有,这是什么鬼?它什么都不做。

$data = $username;
$username = sanitize($data, $con); 
$username = $data;