用户不存在问题


User does not exist issue

我试图找出我的以下代码出了什么问题。它的作用是检查我的数据库中是否存在用户,如果存在,则检查其是否被禁止,然后检查密码输入是否正确。无论如何,我遇到了一个小问题,我的数据库中有一个帐户,在"用户"表下,用户名为"admin",但是当我尝试登录时,它会显示:用户管理员不存在

$check = $dbh->prepare("SELECT * FROM users WHERE username = '$username'"); 
var_dump($check);
$check_array = $check->fetch();
if ($check_array == 0){
    var_dump($check_array);
    $error.= 'The user <strong>'.$username.'</strong> does not exist.<br>';
}else{
    $r = ($check_array);
    if ( $r["banned"] == '1') {
        $error.= 'You are currently banned, you can not log in.<br>';
    }else{
        $r = ($check_array);
        if( $r["password"] !== $password){
            $error.= 'The password you entered is incorrect.<br>';
        }else{

这是用PHP,PDO编码的

我相信

这里的关键问题是你从来没有执行过SQL语句,你只是准备了它。然后 fetch 将失败,0 是 true 到 false,这就是 fetch() 返回的内容。请添加 $check->执行();在您的第一次var_dump($check)之前;并告诉我们。

同样重要的是:

请注意,您不应该直接将变量传递给 prepare 语句,而应该使用 bind_param 方法

$check = $dbh->prepare("SELECT * FROM users WHERE username = ?"); 
$check->bind_param(1, $username, PDO::PARAM_STR);
$check->execute();

这是一种更安全的清理用户输入的方法,应该可以弥补漏洞。