![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
Хочу дать возможность пользователю писать формат поиска, который подставляется для текстовых полей после оператора LIKE и RLIKE:
... WHERE `field` LIKE "some" ... WHERE `field` RLIKE "some" то есть, вот это some. чем обработать приходящую строку, чтобы не получилось ничего более поиска? хватит ли mysql_real_escape_string()? но ведь в строке могут быть служебные символы, типа \t и \\ или это уже само по определению всё отдаётся на совесть пользователя? |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
![]() Добавлено через 1 минуту и 3 секунды хотя можно сделать через select -------------------- Amazing ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
||||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
тьфу ты. я думал что LIKE
вполне -------------------- Amazing ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 14 Всего: 260 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
не, но фиг знает, каковы особенности национального mysql`я
|
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
это уточнение или повторение? или это
значит что-то большее, чем сказали вышеговорившие? |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
строго говоря, в лайк надо слешить бэкслеш дважды
только я не очень помню, это для безопасности, или чтобы он не терялся |
|||
|
||||
saveug |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 23.9.2009 Репутация: нет Всего: -1 |
Я бы порекомендовал делать поиск через FULLTEXT индексы, LIKE сильно тормозит
|
|||
|
||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
имеется ввиду прописывать в таблицу индексы? нет, здесь имеется в виду примитивная фильтрация на базе неожиданно возникшего желания клиента. то есть это не система поиска.
ну, вот теперь я опять в загадках. первые два респондента ответили, что всё тип-топ. а с ваших постов я даже не знаю в какую сторону бежать |
||||
|
|||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
в документацию?
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
дык, по ссылке nerezus уже сходил. моё понимание дальше не пошло
|
|||
|
||||
nerezus |
|
||||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: нет Всего: 43 |
Там написано, что \ экранируется, а \t нет(и не должен).
|
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
нет, я говорил о бэкслеше, а не о метасимволах
но, кажется, это чтобы он не терялся, так что проблемы большой не будет |
|||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
mysql_real_escape_string() всегда должен быть для корректного формирования строки в SQL-запросе, с безопасностью это никак не связано.
Сам паттерн LIKE'а тоже содержит спец. символы: "%", "_", "\" Но не имеет смысла их экранировать в данной ситуации, поскольку тогда пропадает смысл LIKE. Или используй просто "=". Добавлено через 2 минуты и 52 секунды Хотя иногда делают так:
Это сообщение отредактировал(а) Pitlord - 27.11.2009, 18:27 |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
да, такие символы нужны честно говоря, это "иногда" убивает. вопрос же простой, если приходящую строку, которую впоследствии подставлю после LIKE, буду обрабатывать только mysql_real_escape_string(), этого хватит, чтобы пользователь не набедокурил? /подставляться будет только в запросе select/ в смысле, чтобы он не вырвался за пределы запроса и не добавил какое-нибудь drop ... и т.п. в документации что-то написано про енту замену слэшей. касательно моего вопроса я могу сделать вывод только, что всё будет в порядке. из ваших постов после Скайбоя не понятно. то ли делай двойной mysql_real_escape_string, то ли не делай истина где-то рядом, но к какой подошве она у меня прилипла? |
|||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
Слабо в мануал по MySQL глянуть, а не PHP (хотя и туда ты тоже не особо захаживаешь похоже)?
Налицо отсутствие понимания того, что ты делаешь такими функциями, как mysql_real_escape_string, htmlspecialchars, urlencode и пр. Если кратко, то если бекслеш не экранировать, то это позволит пользователю искать символы "%" и "_". Если экранировать — они будут фигурировать только в качестве спец. символов LIKE и не более. Это сообщение отредактировал(а) Pitlord - 27.11.2009, 18:55 |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
||||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
||||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Насколько я вижу в документации, там ничего не написано про символы "%" и "_" в связи с рекомендацией экранировать слеш
|
|||
|
||||
bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
спасибо, за замечание ну, и страшно, что они будут искать эти самые символы?
пример? что угодно. я не знаю, на какую комбинацию пробьёт пользователя |
||||||
|
|||||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
В какой документации? Экранировать для чего — интерпретации строки в SQL-запросе, интерпретации паттерна LIKE? Это ты себе вопрос задай, я тебе просто сказал что будет если экранировать и что — если нет. Я не тебе в данном случае говорил. Тебе просто курить мануал: http://dev.mysql.com/doc/refman/5.0/en/str...l#operator_like http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
По ссылке написано про экранирование "%" и "_"
А я говорил про экранирование "\". Которое никак с первым не связано |
|||
|
||||
Pitlord |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
Попробуй с помощью LIKE, без использования "%" и "_" в качестве спец. символов, найти строку с записью "\%". |
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
и то и другое надо экранировать, но слеш - дважды.
|
|||
|
||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
зачем просто говорить, если можно просто ответить?
не курю. мануалы я читаю. прочитал, ничего нового не узнал. и всё равно, совершенно не догоняю, что после поста Скайбоя вы мне пытаетесь втолковать. по ссылкам написано, что никакая последовательность символов не может выйти за пределы строки, если она была преобразована с помощью mysql_real_escape_string(). |
||||
|
|||||
Pitlord |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
Ну вот, теперь правильно. По-хорошему, должно быть так:
Но будет работать и так:
...., но это запутывает. Проверить, что мы не соврали можно, заменив "%" на "_":
Добавлено через 1 минуту и 55 секунд bars80080, короче, с безопасностью это никак не связано. Применил mysql_real_escape_string() — будет синтаксически корректная строка, ошибок не будет. "Вылезти" куда-то там нельзя. |
||||||
|
|||||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
||||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
мля. тогда вопрос в первую очередь к nerezus, зачем было вводить в заблуждение? второй вопрос к Ипатьев, почему было не ответить на вполне простой вопрос, а специально запутывать? третий вопрос к Pitlord тот же что и к Ипатьеву |
|||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Ну, да. фразу лично я понимаю так, что слеш надо экранировать для того, чтобы позволить пользователю искать символы "%" и "_" а на самом деле двойное экранирование слеша и поиск символов "%" и "_" никак между собой не связаны Это сообщение отредактировал(а) Ипатьев - 27.11.2009, 20:51 |
|||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
||||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
||||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Она не моя. Она из документации
![]() |
|||
|
||||
Pitlord |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 31.10.2009 Репутация: нет Всего: 7 |
||||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |