我试图找出以下代码有什么问题。它的作用是在我的数据库中检查用户是否存在以及是否存在,然后检查它是否被禁止,然后检查密码的输入是否正确。无论如何我有一个小问题,我在我的数据库下的'用户'和用户名'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
答案 0 :(得分:2)
我认为这里的关键问题是你从未执行过SQL语句,你只是准备好了。然后获取失败,0变为false,这就是fetch()返回的结果。请添加$ check-&gt; 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();
这是一种更安全的方法,可以清理您的用户输入,并且可以弥补漏洞。