需要纠正我的mysqli查询

时间:2013-11-24 04:32:39

标签: php mysql database login mysqli

我在PHP中使用mysqli并尝试从数据库中获取数据以登录系统。当我使用phpmyadmin执行我的查询时,我得到了完美的结果。但是当我试图从PHP脚本中获取它时,我得到了一个概率。我的php脚本在

下面
if(isset($login)){


$email = @$db->real_escape_string(htmlentities($_POST['loginid']));
$username = @$db->real_escape_string(htmlentities($_POST['loginid']));
$pass1 = @$db->real_escape_string(htmlentities($_POST['loginpass']));

$blah = new Encryption();
$pass = $blah->encode($pass1);


    if($db->query("SELECT `uid` FROM `users` WHERE BINARY `uname` = '$username' AND `pass` = '$pass'")){
    $errors[] = 'Logged in by username';
    }
    else if($db->query("SELECT `uid` FROM `users` WHERE `email` = '$username' AND `pass` = '$pass'")){
    $errors[] = 'Logged in by email';
    }   

}

现在问题是我的用户名是'abc',电子邮件是'abc@abc.com',密码是加密的'qazwsx'。第二个用户名是'xyz',电子邮件是'xyz@xyz.com',密码是'abcdef'但是它没有检查uname并立即传递或发送电子邮件并立即传递。如果我输入'1'或任何带有'qazwsx'密码的内容,它会显示您'已按用户名登录'表示它只检查密码。

为了看到结果,我使用了这些代码,

if($errors){
        echo '<ul>';
            foreach ($errors as $error){
            echo '<li>'.$error.'</li>';
            }
        echo '</ul>';
} 

else if ($loginform){
    echo $loginform;
    }

我不知道该怎么办。请帮帮我。

1 个答案:

答案 0 :(得分:0)

查找0行不是错误。查询无法找到任何内容并仍然可以返回成功。

您希望在查询返回后进行检查,并确保结果至少包含一行。

$result = $db->query("SELECT....");
if ($result and $result->num_rows) {
    # query found a matching user
}