我正在使用MySQL和PHP。在我的数据库中,我有一个名为users
的表,users
表内有一条记录:
用户名:管理员
密码:密码
在我的登录页面中,我尝试使用(密码:密码)登录:
- 用户名:ADMIN -> 结果:可以登录
- 用户名:admin -> 结果:可以登录
我将用户名作为“admin”存储在我的数据库中,全部小写。
在我的 PHP 身份验证页面中,我没有包含 strtolower() 函数。这是否意味着,在 PHP 中,我提交的用户名表单字段不区分大小写?
这不是 PHP。您的数据库查询不区分大小写。
您可以将操作数之一设为二进制字符串。例如:
SELECT 'abc' LIKE 'ABC';
这将返回1
或true
。尽管
SELECT 'abc' LIKE BINARY 'ABC';
将返回0
或false
。
是的,正如 Randell 所说,数据库是区分大小写的。检查这篇文章,我们可以让 MySQL 对 SELECT 查询区分大小写,我们可以强制 MySQL 中的列始终为小写吗?.
我想在它清楚之前还有一段路要走...
MySQL 对查询不区分大小写。SELECT 和 select 的意思是一样的。
表中的数据按原样存储,但由于您只能通过查询获取信息,因此您需要仔细措辞。
正如兰德尔所说
select 'abc' like 'ABC'
将返回 TRUE (所以会SELECT 'abc' like 'ABC'
),因为 LIKE 忽略大小写差异
select 'abc' like binary 'ABC'
将返回 FALSE (也会返回SELECT 'abc' LIKE BINARY 'ABC'
),因为 LIKE BINARY 看起来更仔细。二进制级别存在差异。
它怎么知道它是用户名表单字段?
如果我没记错的话,在 *nix 中,用户名是不区分大小写的。您是否使用库来存储用户信息并进行比较?
当您登录时,我认为您应该编写查询以验证您保存的表中的用户名和密码是否相同。