-3

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

$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 编码的

4

1 回答 1

2

我相信这里的关键问题是您从未执行过 SQL 语句,您只是准备好了它。然后 fetch 将失败,并且 0 是真假,这就是 fetch() 返回的内容。请添加 $check->execute(); 在你的第一个 var_dump($check); 让我们知道。

同样重要的是:

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

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

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

于 2013-11-10T06:08:56.390 回答