在我的用户表中,我有一行username = Q
。当我尝试以“q”登录时,它表示用户不存在,但是“Q”按预期工作。这是登录检查代码。
$username = $_POST["name"];
$password = $_POST["pass"];
$pahash = crypt($password, $username);
$logcheck = $db->prepare("
SELECT *
FROM users
WHERE username = :username
AND password = :pahash
");
$logcheck->execute(array(
':username' => $username,
':pahash' => $pahash));
我数据库中几乎每一列的排序规则都是“latin1_swedish_ci”,它不区分大小写。那么,为什么它似乎是区分大小写的呢?
如果重要,则用户列的类型为char(20)。
答案 0 :(得分:2)
$username = $_POST["name"];
$password = $_POST["pass"];
$username = strtolower($username);
$pahash = crypt($password, $username);
$logcheck = $db->prepare("
SELECT *
FROM users
WHERE LOWER(username) = :username
AND password = :pahash
");
$logcheck->execute(array(
':username' => $username,
':pahash' => $pahash));
答案 1 :(得分:1)
使用“LIKE”而不是“=”作为用户名:
SELECT *
FROM users
WHERE username LIKE :username
AND password = :pahash
答案 2 :(得分:1)
问题是crypt
不区分大小写。因此,当$pahash
的值从$password
更改为$username
时,Q
的值与q
的相同值不同。