2012-04-02 5 views
9

Я хочу, чтобы получить содержимое из строки в базе данных и сравнить строчную версию этого в строчную версию пользовательского Imput, чтобы проверить, если он существует в базе данных:MySQL строчных сравнить данные

"SELECT `id` FROM `user_accounts` WHERE `username` = '".strtolower($username)."'" 

Как я могу получить имя пользователя в нижнем регистре от mysql?

+2

'LOWER (имя пользователя)' Просмотрите [строковые функции MySQL] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html) –

ответ

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) 
+0

Я думаю, что установка по умолчанию mysql с использованием myisam уже нечувствительна к регистру – iWantSimpleLife

+1

@iWantSimpleLife: Предполагаете ли вы, что у нас есть такая же конфигурация, на которую вы смотрели? И что, если они перейдут в другую систему, изменив настройку по умолчанию? –

+0

Это неверно, потому что может повлиять на будущие вставки, '' 'lower (' username') '' 'является правильным ответом –

-1
"SELECT `id` FROM `user_accounts` WHERE lower(`username`) = '".strtolower($username)."'" 
+0

Тот же ответ –

2
$query = "SELECT `id` 
      FROM `user_accounts` 
      WHERE LOWER(`username`) = '".strtolower($username)."'" 
1

Вы можете использовать следующий запрос, чтобы сделать так:

$myquery = "SELECT `id` FROM `user_accounts` WHERE 
      LOWER(`username`) = '".strtolower($username)."'" 

LOWER функция SQL, которая преобразует все символы в нижний регистр, так же, как в PHP strtolower

Об одном Примечание: вам следует избегать $username, используя mysql_real_escape_string, чтобы избежать возможной инъекции sql в этой точке.

1

Как ответил выше, в идеале это должно работать,

$query = "SELECT `id` 
      FROM `user_accounts` 
      WHERE LOWER(`username`) = '".strtolower($username)."'"; 

, но он не будет работать, если столбец «имя пользователя» в таблице «user_accounts» определяется как VARBINARY. Причина в VARBINARY требует, чтобы данные были чувствительны к регистру.

2

Использование одного из вышеуказанных запросов должно работать нормально, но ВНИМАНИЕ! Если вы указали свой столбец имени пользователя, используя LOWER, он сделает так, чтобы ваш запрос не использовал этот индекс.

0

Просто используйте:

SELECT `id` 
FROM `user_accounts` 
WHERE LOWER(`username`)='".strtolower($username)."'"; 

Или используйте

SELECT `id` 
FROM `user_accounts` 
WHERE LCASE(`username`)='".strtolower($username)."'"; 

Оба будут работать так же.

Смежные вопросы