-1

在最近的一个项目中,我在匹配数据库中的密码时遇到了问题。

查询如下:

mysql_query("SELECT * FROM user_accounts WHERE username = '$username' AND password = '$encryptedPass'")

这输出

SELECT * FROM user_accounts WHERE username = 'T-McFarlane' AND password = 'äê1\Y¸c'

它可以只用用户找到我,但不能用密码找到我。我已经回显了数据库密码和提供的加密密码,它们完全相同 - 这是数据库中的内容,但找不到匹配的行。

我的问题是这个密码是否包含任何特殊字符,或者是否有任何其他原因导致失败?

我已经为我在数据库中的排序规则设置尝试了 utf8_swedish_ci 和 latin1_swedish_ci。

4

1 回答 1

0

您需要转义字符串中的特殊字符:

$username = mysql_real_escape_string($username);
$encryptedPass = mysql_real_escape_string($encryptedPass);
mysql_query("SELECT * FROM user_accounts WHERE username = '$username' AND password = '$encryptedPass'")

但是,最好切换到 PDO 或 mysqli,并使用参数化查询。

于 2013-08-26T19:47:58.457 回答