我想从数据库中的一行获取内容,并将其小写版本与用户输入的小写版本进行比较,以检查它是否存在于数据库中:
"SELECT `id` FROM `user_accounts` WHERE `username` = '".strtolower($username)."'"
如何从mysql中获取小写用户名?
您使用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)."'"
如果您真的希望大小写无关紧要,那么您应该将列的排序规则设置为不区分大小写。
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)
如上所述,理想情况下,
$query = "SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`) = '".strtolower($username)."'";
但如果"user_accounts"表中的"username"列被定义为VARBINARY,则它将不起作用。原因是VARBINARY要求数据区分大小写
使用上述查询之一应该可以正常工作,但注意!如果您已经为用户名列编制了索引,那么对其使用LOWER将使其成为索引,这样您的查询就不会使用该索引。
$query = "SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`) = '".strtolower($username)."'"
简单使用:
SELECT `id`
FROM `user_accounts`
WHERE LOWER(`username`)='".strtolower($username)."'";
或者使用
SELECT `id`
FROM `user_accounts`
WHERE LCASE(`username`)='".strtolower($username)."'";
两者的工作原理相同。
您可以使用以下查询来执行此操作:
$myquery = "SELECT `id` FROM `user_accounts` WHERE
LOWER(`username`) = '".strtolower($username)."'"
LOWER
是将所有字符转换为小写的SQL函数,就像PHP的strtolower
一样
附带说明:您应该使用mysql_real_escape_string
来转义$username
,以避免此时可能的sql注入。
"SELECT `id` FROM `user_accounts` WHERE lower(`username`) = '".strtolower($username)."'"