2

我可以使用表单中的以下代码获取用户输入的名称(用户名)。所以我的问题是,如果我输入Shibbirbd(第一个字母是大写字母,但它shibbirbd在我的数据库中),那么它会成功进入用户登录面板!但这是错误的。为什么会这样?Mysql 数据库用户名是:shibbirbd.

登录表单脚本:

$uname = mysql_real_escape_string(htmlspecialchars(trim($_POST['uname'])));
$pass = mysql_real_escape_string(htmlspecialchars(trim($_POST['pass'])));
4

5 回答 5

2

您可以将您的WHERE子句更改为WHERE BINARY( WHERE BINARY uname = '$uname') 以测试用户名的二进制值是否相等。

如果您希望此表上的所有查询都区分大小写,则应考虑更改排序规则,如@Kolink 建议的那样。

于 2012-05-20T06:47:48.643 回答
1

您是说如果您在应该有小写字母的地方使用大写字母,您希望它不会让您登录吗?

在这种情况下,将表的排序规则更改为区分大小写的内容,例如utf8_bin.

于 2012-05-20T06:47:15.377 回答
0

在大多数情况下,字符串是不区分大小写的。为什么用户名区分大小写很重要?

在 MySQL 中,您可以使用编码 _ci 看到它,这意味着不区分大小写。如果需要,请尝试一些 _bin 或 _cs 甲酸盐。

于 2012-05-20T06:47:33.570 回答
0

听起来列排序规则不区分大小写,这是默认设置。尝试将其更改为区分大小写的排序规则,例如 latin_general_cs

于 2012-05-20T06:48:03.070 回答
0

用于COLLATE区分大小写。您可以在此链接中看到示例。
http://dev.mysql.com/doc/refman/5.0/en/case-sensitive.html

于 2012-05-20T06:50:04.207 回答