我在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;
}
我不知道该怎么办。请帮帮我。
答案 0 :(得分:0)
查找0行不是错误。查询无法找到任何内容并仍然可以返回成功。
您希望在查询返回后进行检查,并确保结果至少包含一行。
$result = $db->query("SELECT....");
if ($result and $result->num_rows) {
# query found a matching user
}