В любом случае, будь то INSERT/UPDATE или SELECT, которому передаётся параметр для вывода нужной страницы, какие-либо данные так или иначе попадают от пользователя в SQL запрос. Так вот собственно мой вопрос: что и как нужно делать с этими данными? В них ведь могут быть кавычки, комментрарии и всё что угодно. Какие действия необходимо выполнить?
Советую почитать http://www.dklab.ru/lib/Database_Placeholder/ Использовать не обязательно, но идею понять стоит.
Vigo Использовать, как раз, (этот, или другой подобный механизм) - как раз стоит. Весьма стоит. А вот чтобы понять идею, лучше почитать здесь: http://phpfaq.ru/slashes
Хм.... Очень интересно. Благодарю. Так в принципе то (если не затрагивать темы удобства и универсальности), неодходимо обработать данные с помощью addslashes(), и это будет достаточным для адекватного восприятия запросов, правильно я понимаю? И ещё, при пересылке через форму не_latin1 данные по идее должны кодироваться... как это всё происходит и нужно ли (в данном контексте) с этими данными что-то делать?
2Горбунов Олег: Хм.... То есть вы хотите сказать, что '%C1' == 'Б' ? 2Чебурген: Хм.... если нет, что что тогда не учтено? Я что-то запутался.
Сдается мне, что товарищ не прочитал ссылку, которую я дал. Это сегда очень обидно.вроде бы, он сам просил помочь. Ты стараешься, делишься с ним тем, что сам знаешь. и натыкаешься на полный игнор. Не понимаю...
Vigo Если у тебя есть какие-то проблемы с получением данных от клиента, то надо их сформулировать, и задать отдельный вопрос. а здесь обсуждается, если ты ещё не забыл, "Предварительная обработка инструкций запроса". А запросу будет всё равно, что в нем написано: '%C1' или 'Б'.
Чебурген, советую применять метод буддийских монахов. Они давали бессмысленные и поверхностные сведения, пока чел не доказывал, что хочет понять, а не заучить...
Вы видимо mysql_real_escape_string() и методы обработки для LIKE имеете в виду? Ну собственно это вроде бы из одной темы. Добавление слэшей. Я имею в виду является ли вопрос разрешённым после всей этой работы со слэшами?
Нет (и, вероятно, не будет) возможности использовать PDO на сервере, под который рассчитывается проект. Но если решает, это конечно здорово... =)
Vigo, вообще, mysql_real_escape_string хорош тем, что это встроенная функция MySQL - т.е. если вдруг правила экранирования изменятся для MySQL, ваши проекты, использующие ее, сохранят совместимость, что немаловажно. Другой важный фактор — addslashes экранирует НЕ все спец. символы MySQL, а только «'», «"» «\» и NUL тогда как mysql_real_escape_string — «\x00», «\n», «\r», «\», «'», «"» и «\x1a»
И всё же повторюсь: Первое Второе Когда передаётся строка (хотя бы в URL через GET) то в ней символы (кирилица, скобки, амперсанд & etc.) кодируются. Так вот если это ста строка например для поиска с использованием оператора LIKE, то идентичны ли будут значения %D4 и Ф или что-то нужно с этой строкой делать?
если вопрос именно в оставлении запросов, и если динамическими элементами в запросе являются только данные, то является.
И всё же повторюсь: Если у тебя есть какие-то проблемы с получением данных от клиента, то надо их сформулировать, и задать отдельный вопрос.
Хм... Ну собственно думается, что надо бы к этому применить urldecode ()... правильно думается? А дальше наверное пропустить через ereg_replace() чтобы убить недопустимые символы, проверить, осталось ли что-нибудь и подставить в LIKE.... Вот так наверное как-то.... А можно как-то определить, кодированы ли данные, т.е. имеют они вид %D4 иили Ф?
ты испытываешь мое терпение. я тебе два раза сказал, что разные, никак не связанне между собой вопросы, надо задавать в разных темах. Скажи, ты понимаешь русский язык? или я так сложно пишу, что для тебя недоступен смысл моих слов? Если так, то скажи - я буду писать специально для тебя, попроще. БА! откуда тут какие-то символы-то взялись? кто их не допускает? Куда? За что?
2Чебурген: Ну хорошо. Перенёс эту часть вопроса. Не суть важно, собственно, откуда они там взялись, главное, что в качестве параметра поиска допустимыми остаются только определённые символы.
Судя по всему, это опять какие-то твои собственные заморочки, не имеющие отношения к INSERT/UPDATE или SELECT. А исходный вопрос исчерпан?