php - Mysql查询总是返回true

标签 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。

最佳答案

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;

关于php - Mysql查询总是返回true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520763/

相关文章:

php - Symfony2 动态表单域

php - 找不到 Laravel/Dusk Swift_Events_EventListener

php - 数组php和数据库mysql保存数据

mysql - mysql中3个表的自然连接

mysql - 神秘的 SQL 变量

mysql - 在 MySQL InnoDB 中存储大于 max_allowed_pa​​cket 的 BLOB 的最佳方法

php - 如何在 PHP 中使用 for 循环打印 $title1 $title2 $title3...

javascript - 如果用户已登录,如何实时检查?

php - xajax扩展列表查询

mysql - 简单的Mysql "insert"存储过程不起作用