1

在我的用户表中,我有一行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)。

4

3 回答 3

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));
于 2013-09-24T02:47:07.620 回答
1

使用“LIKE”而不是“=”作为用户名:

SELECT *
    FROM users
    WHERE username LIKE :username
    AND password = :pahash
于 2013-09-24T02:44:04.920 回答
1

问题是它crypt不区分大小写。因此,当 的值从变为时$pahash,相同的值 的值是不同的。$password$usernameQq

于 2013-09-24T02:44:42.693 回答