我想从数据库中的一行获取内容,并将其小写版本与用户输入的小写版本进行比较,以检查它是否存在于数据库中:
"SELECT `id` FROM `user_accounts` WHERE `username` = '".strtolower($username)."'"
如何从mysql获取小写的用户名?
答案 0 :(得分:25)
您使用lower(username
)http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lower
"SELECT `id` FROM `user_accounts` WHERE LOWER(`username`) = '".strtolower($username)."'"
答案 1 :(得分:8)
如果你真的想要无关紧要,那么你应该将列的排序规则设置为不区分大小写。
mysql> SET NAMES 'utf8' COLLATE 'utf8_unicode_ci';
Query OK, 0 rows affected (0.03 sec)
mysql> SELECT 'foobar' = 'FoObAr';
+---------------------+
| 'foobar' = 'FoObAr' |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.01 sec)
mysql> SELECT 'fOoBaR' = 'FoObAr';
+---------------------+
| 'fOoBaR' = 'FoObAr' |
+---------------------+
| 1 |
+---------------------+
1 row in set (0.00 sec)
mysql> SELECT 'fOoBaR' = 'FoObAz';
+---------------------+
| 'fOoBaR' = 'FoObAz' |
+---------------------+
| 0 |
+---------------------+
1 row in set (0.00 sec)
答案 2 :(得分:3)
如上所述,理想情况下这应该有效,
$query = "SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`) = '".strtolower($username)."'";
但如果“user_accounts”表中的“username”列定义为VARBINARY,则无效。原因是VARBINARY要求数据区分大小写
答案 3 :(得分:2)
$query = "SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`) = '".strtolower($username)."'"
答案 4 :(得分:2)
使用上述查询之一应该可以正常工作,但小心!如果您的用户名列已编入索引,则使用LOWER会使您的查询无法使用该索引。
答案 5 :(得分:1)
您可以使用以下查询执行此操作:
$myquery = "SELECT `id` FROM `user_accounts` WHERE
LOWER(`username`) = '".strtolower($username)."'"
LOWER
是将所有字符转换为小写的SQL函数,就像PHP的strtolower
旁注:您应该使用$username
转义mysql_real_escape_string
以避免此时可能的SQL注入。
答案 6 :(得分:0)
只需使用:
SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`)='".strtolower($username)."'";
或使用
SELECT `id`
FROM `user_accounts`
WHERE LCASE(`username`)='".strtolower($username)."'";
两者都是一样的。
答案 7 :(得分:-1)
"SELECT `id` FROM `user_accounts` WHERE lower(`username`) = '".strtolower($username)."'"