【问题标题】:Mysql query always returning trueMysql查询总是返回true
【发布时间】:2015-04-08 16:53:41
【问题描述】:

所以我正在尝试使用 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。

【问题讨论】:

  • 您似乎总是返回一行带有“禁止”字符串。唯一的条件是用户必须存在。如果不是,请澄清。

标签: php mysql


【解决方案1】:

mysqli_affected_rows() 用于插入和更新。你想要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;

【讨论】:

  • 也许加上“和禁止=真”
  • 好的,感谢您的帮助。我也不知道为什么会在那里,它是从旧代码中复制的部分
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多