Mysql查询总是返回true

时间:2015-04-08 16:53:42

标签: php mysql

所以我试图检查用户是否被禁止使用mysqli查询但是它似乎总是返回用户被禁止。即使他们没有被禁止。

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函数由于某种原因总是返回true。

2 个答案:

答案 0 :(得分:3)

mysqli_affected_rows()用于INSERT和UPDATE。你想要mysqli_num_rows()

如果恰好有超过1行,您当前的逻辑将返回false,因此这可能更有意义:

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

另外,****是什么?它什么都没做。

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

答案 1 :(得分:1)

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