【发布时间】:2017-04-04 02:00:10
【问题描述】:
这是我的 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";
但它们都不起作用。
【问题讨论】:
-
如果您决定切换到使用安全的散列函数(例如
password_hash()),您将会遇到问题,您知道吗?我强烈建议您反对您想要做的事情。如果您继续这样做,您的站点/数据库被黑客入侵只是时间问题;毕竟这是您的网站和用户的敏感信息。 -
@Fred 我知道所有这些东西,我以这种方式展示了我的 php 代码,因为我希望我的问题看起来尽可能简单,并且我想专注于我的真正问题,即如何制作 sql查询区分大小写? avobe php 代码只是一个例子。
-
看看这个问答中有什么帮助stackoverflow.com/q/1694692/1415724