这是我的PHP代码,我试图创建登录系统工作得很好,但是如果用户在数据库中有密码='abcd',如果他们输入'ABCD',他们仍然可以登录我不想要。我希望我的SQL查询区分大小写。
class Login extends Connection {
private $userName;
Private $password;
public function userLogin($userName, $password) {
$this -> userName = $userName;
$this -> password = $password;
$sql = "SELECT * FROM user WHERE user_name = :userName AND user_password = :password";
$stmt = $this -> conn -> prepare($sql);
$stmt -> execute(array(
':userName' => $this -> userName,
':password' => $this -> password
));
if($stmt -> rowCount() == 1) {
$_SESSION['userName'] = $userName;
header("location:../index.php");
}
else {
$_SESSION['loginMessage'] = "signin unsucessful";
}
}
}
我也试过像
这样的东西$sql = "SELECT * FROM user WHERE user_name = :userName AND user_password COLLATE SQL_Latin1_General_CP1_CS_AS = :password";
我试过
$sql = "SELECT * FROM user WHERE user_name = :userName AND BINARY user_password = :password";
但他们都没有工作。
答案 0 :(得分:2)
这绝对是不想要解决的问题。以纯文本保存密码是非常非常糟糕的主意。该怎么办? Salt和hash密码。
答案 1 :(得分:0)
请不要存储普通密码。
但是,回答你的问题,可能数据库正在使用不区分大小写的排序规则。
您必须在数据库上设置排序规则或设置要在查询中使用的排序规则。
答案 2 :(得分:0)
同意salting密码,但这应该适用于MySQL中的区分大小写的比较。
select case when cast('test' as binary) = cast('TEST' as binary) then 1 else 0 end
答案 3 :(得分:-2)
SELECT * FROM user WHERE user_name COLLATE latin1_general_cs = :userName AND user_password COLLATE latin1_general_cs = :password