where не сравнивает регистр

Devillio

Новичок
where не сравнивает регистр

Господа, я все постигаю методом тыка, институтов не кончали, как говорится, так вот любопытная для меня вешь: в запрос

PHP:
$sql="select * from ".USR_TABLE." where username='".$_GET["user"]."'";
попадает и devillio, и Devillio, и dEvILlIO. Как избавиться от сего бага? ...или фичи?

Благодарю.

-~{}~ 20.09.05 14:03:

как то я тему неверно поставил: where не учитывает регистр при сравнении - так правильнее.
 

440hz

php.ru
Re: where не сравнивает регистр

Автор оригинала: Devillio
Господа, я все постигаю методом тыка, институтов не кончали, как говорится, так вот любопытная для меня вешь: в запрос
постигать надо методом скурпулезного изучения документации ибо там 99% ответов и есть. например настройки регистрозависимости таблиц, полей, поиска и т.д.

p.s. так и хочется кавычку AND 1=1 в $_GET['user'] вставить. гыгыгы
 

Кром

Новичок
>Как избавиться от сего бага? ...или фичи?

Это не баг и не фича, это ты работаешь с регистронезависимым полем.

Как избавиться, можешь посмотреть в поиске.
 

Oleg Marchuk

Человек
Re: where не сравнивает регистр

Одно из возможных решений:
[sql]
select * from test;
[/sql]
+----+------+
| id | name |
+----+------+
| 1 | name |
| 2 | Name |
+----+------+
2 rows in set (0.00 sec)

[sql]select name from test where STRCMP(name,cast('Name' as binary))=0;
[/sql]
+------+
| name |
+------+
| Name |
+------+
1 row in set (0.00 sec)
 

Devillio

Новичок
Это не баг и не фича, это ты работаешь с регистронезависимым полем.
выходит, фича. полез в документацию :rolleyes:

народ, а че то мысль
p.s. так и хочется кавычку AND 1=1 в $_GET['user'] вставить. гыгыгы
меня навела на иную мысль, что так можно всю мою табличку слить... как же быть? (я понимаю, мысль offtopic, но все же). Это уже не мысль, это паника.
 

Devillio

Новичок
впрочем, если реализовать, как предлагает уважаемый Oleg Marchuk, то можно не волноваться насчет user=' AND '1=

пошел тестировать. всем спасибо.
 

Oleg Marchuk

Человек
Devillio
Нужно волноваться. Смотри:
PHP:
$_GET['param'] = "' AS binary) ) = 0 or 1=1 or STRCMP(name, cast('";
$sql = "SELECT name
FROM test
WHERE STRCMP( name, cast( '"$_GET['param']."' AS binary ) ) = 0";
Получим
[SQL]
FROM test
WHERE STRCMP( name, cast( '' AS binary) ) = 0 or 1=1 or STRCMP(name, cast('' AS binary ) ) = 0
[/SQL]
 

Апельсин

Оранжевое создание
Devillio, а версия какая? Если 4.1 и выше, то ставишь просто collation который case sensitive.
 
Сверху