За последние 24 часа нас посетили 16893 программиста и 1294 робота. Сейчас ищут 1439 программистов ...

Предварительная обработка инструкций запроса

Тема в разделе "MySQL", создана пользователем Vigo, 22 ноя 2006.

  1. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    В любом случае, будь то INSERT/UPDATE или SELECT, которому передаётся параметр для вывода нужной страницы, какие-либо данные так или иначе попадают от пользователя в SQL запрос.
    Так вот собственно мой вопрос: что и как нужно делать с этими данными? В них ведь могут быть кавычки, комментрарии и всё что угодно.
    Какие действия необходимо выполнить?
     
  2. Anonymous

    Anonymous Guest

  3. Vigo
    Использовать, как раз, (этот, или другой подобный механизм) - как раз стоит. Весьма стоит.
    А вот чтобы понять идею, лучше почитать здесь: http://phpfaq.ru/slashes
     
  4. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    Хм.... Очень интересно. Благодарю.
    Так в принципе то (если не затрагивать темы удобства и универсальности), неодходимо обработать данные с помощью addslashes(), и это будет достаточным для адекватного восприятия запросов, правильно я понимаю?

    И ещё, при пересылке через форму не_latin1 данные по идее должны кодироваться... как это всё происходит и нужно ли (в данном контексте) с этими данными что-то делать?
     
  5. Anonymous

    Anonymous Guest

    Vigo, нет, на форму таких ограичений нет.
     
  6. нет.
    по какой идее?
    как именно кодироваться?
    Источник получения данных не имеет никакого значения.
     
  7. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    2Горбунов Олег:
    Хм.... То есть вы хотите сказать, что
    '%C1' == 'Б'
    ?

    2Чебурген:
    Хм.... если нет, что что тогда не учтено? Я что-то запутался.
     
  8. Сдается мне, что товарищ не прочитал ссылку, которую я дал.
    Это сегда очень обидно.вроде бы, он сам просил помочь. Ты стараешься, делишься с ним тем, что сам знаешь. и натыкаешься на полный игнор. Не понимаю...
     
  9. Vigo
    Если у тебя есть какие-то проблемы с получением данных от клиента, то надо их сформулировать, и задать отдельный вопрос.

    а здесь обсуждается, если ты ещё не забыл, "Предварительная обработка инструкций запроса".
    А запросу будет всё равно, что в нем написано: '%C1' или 'Б'.
     
  10. Anonymous

    Anonymous Guest

    Чебурген, советую применять метод буддийских монахов. Они давали бессмысленные и поверхностные сведения, пока чел не доказывал, что хочет понять, а не заучить...
     
  11. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    Вы видимо mysql_real_escape_string() и методы обработки для LIKE имеете в виду? Ну собственно это вроде бы из одной темы. Добавление слэшей. Я имею в виду является ли вопрос разрешённым после всей этой работы со слэшами?
     
  12. Anonymous

    Anonymous Guest

    Кстати, PDO так же решает эту проблему автоматически...
     
  13. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    Нет (и, вероятно, не будет) возможности использовать PDO на сервере, под который рассчитывается проект. Но если решает, это конечно здорово... =)
     
  14. Anonymous

    Anonymous Guest

    Vigo, вообще, mysql_real_escape_string хорош тем, что это встроенная функция MySQL - т.е. если вдруг правила экранирования изменятся для MySQL, ваши проекты, использующие ее, сохранят совместимость, что немаловажно. Другой важный фактор — addslashes экранирует НЕ все спец. символы MySQL, а только «'», «"» «\» и NUL тогда как mysql_real_escape_string — «\x00», «\n», «\r», «\», «'», «"» и «\x1a»
     
  15. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    И всё же повторюсь:
    • Первое
    • Второе
      Когда передаётся строка (хотя бы в URL через GET) то в ней символы (кирилица, скобки, амперсанд & etc.) кодируются. Так вот если это ста строка например для поиска с использованием оператора LIKE, то идентичны ли будут значения %D4 и Ф или что-то нужно с этой строкой делать?
     
  16. если вопрос именно в оставлении запросов,
    и если динамическими элементами в запросе являются только данные,
    то является.
     
  17. И всё же повторюсь:
    • Если у тебя есть какие-то проблемы с получением данных от клиента, то надо их сформулировать, и задать отдельный вопрос.
     
  18. ты это серьёзно спрашиваешь?
    А так, на глаз - не видно?
     
  19. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    Хм... Ну собственно думается, что надо бы к этому применить urldecode ()... правильно думается? А дальше наверное пропустить через ereg_replace() чтобы убить недопустимые символы, проверить, осталось ли что-нибудь и подставить в LIKE....
    Вот так наверное как-то....
    А можно как-то определить, кодированы ли данные, т.е. имеют они вид %D4 иили Ф?
     
  20. ты испытываешь мое терпение.
    я тебе два раза сказал, что разные, никак не связанне между собой вопросы, надо задавать в разных темах.
    Скажи, ты понимаешь русский язык? или я так сложно пишу, что для тебя недоступен смысл моих слов? Если так, то скажи - я буду писать специально для тебя, попроще.
    БА! откуда тут какие-то символы-то взялись? кто их не допускает? Куда? За что?
     
  21. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    2Чебурген:
    Ну хорошо. Перенёс эту часть вопроса.
    Не суть важно, собственно, откуда они там взялись, главное, что в качестве параметра поиска допустимыми остаются только определённые символы.
     
  22. Судя по всему, это опять какие-то твои собственные заморочки, не имеющие отношения к INSERT/UPDATE или SELECT.
    А исходный вопрос исчерпан?
     
  23. Vigo

    Vigo Активный пользователь

    С нами с:
    2 окт 2006
    Сообщения:
    56
    Симпатии:
    0
    Адрес:
    Moscow, Russia
    В принципе - да. Этого достаточно уже.