我想知道如何检查我的数据库中是否存在登录名。目前我正在使用mysql_num_rows()
,但两个小时前我意识到这对我的网站不安全,因为如果我注册昵称:保罗和我的朋友注册昵称:PauL,我的网站让注册这些昵称......我不知道如何检查单词是否等于同一个单词只是不同的字母......
假设你的意思是大写和小写的混合。例如,paul,Paul,PAUL,pAUL应该在数据库中被视为单个名称。
然后,您应该使用此 sql 查询来检查该名称是否已存在:
SELECT * FROM table1 WHERE LOWER(table1.nickname) = LOWER('PaUl')
这会在执行相等性检查之前将"昵称"列中的数据转换为小写,并将"PaUl"转换为较低。
SELECT whatever FROM users WHERE UCASE(username) = 'USERNAMEINUPPERCASE';
基本上,如果使用 UCASE()
函数,则将表中的用户名转换为大写(出于查询目的),然后与所需用户名的大写版本进行比较,从而使查询不区分大小写。
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
在进行比较之前,对两个变量都使用 strtolower()
函数
您可以在
SELECT
查询中定义它
SELECT * FROM `table` WHERE LOWER(`Nickname`) = LOWER($nickname)
但取决于您的排序规则*_ci
区分大小写或_cs
区分大小写。如果你有*_ci
你没有什么可担心的。
首先,用户名应该是唯一的,不区分大小写;将用户名的排序规则字段设置为数据库中的utf8_unicode_ci或utf8_general_ci。
然后运行当前查询。
SELECT * FROM users WHERE username = '$_var'