это доп. функция.. она вообще может быть без рассматриваемых нами шаблонов.. она вообще всё что угодно может делать.. на что твоей фантазии хватит ещё раз: 1) сокращение кода 2) страховка от забывчивости 3) возможности что-то эдакое с этими запросами делать (например кэшировать... или на мыло себе отправлять ) 4) можно написать что-то мульти-БДшное, что диалект одной БД будет переделывать в диалект используемой БД замерь 10К стандартных запросов из php скрипта со sprintf и без, и поймёшь, что параноишь потери по производительности в данном случае ничтожно малы и ими можно принебречь.. )
ну и зачем мне это функция с sprintf ? я лучше её сделаю без.... не всегда например? кешируют не запросы, кешируют то что они возвращают, для этого вовсе не нужно никаких sprintf'оф
каждый раз руками вставлять mysql_real_escape_string() на каждый параметр короче? например забыл mysql_real_escape_string() не доёбывайся до слов, а, ты же понял о чём я?
напиши функцию Код (Text): function s($str) { return mysql_real_escape_string($str); } ок, но это сложно - забыть не совсем =) если о кешировании данных, то я уже несколько раз говорил что шаблоны sql тут ни как не помогают
Vitas, наверное у меня какой-то неправильный SQL. Он переменную $id='dskf'; не приводит почему-то к INT'y. Mr.M.I.T., опять же повторюсь, что на вкус и цвет все фломастеры разные и спор бессмысленен. А теперь по пунктам: потеря производительности думаю куда как больше чем у goDB. Так что сам себе противоречишь. А по поводу без экранирования - вставяться нормальные данные и нормально потом извлекуться и диссериализуются Не знаю, наверное я какой-то неправильный, но у меня переменных не более 3-х 4-х в запросе и я между ними не путаюсь. В конце концов я тут не проверяю, например, является ли данная строка URL-ом или доменом, я просто обезопашиваю себя от дыр в безопастности. А проверка на спец символы и проч. пускай будет в одно единственном месте, ибо в большом проекте раскиданные по всем местам mysql_escape_string() смерти подобны. P.S. в таблицы очень редко подставляю ?t , но у них есть приятная фича - потом делаешь $db->setPrefix("prefix_"); и вуаля у всех таблиц появился нужный префикс
Vitas, вот что получиться: [sql] INSERT INTO test SET id =123, category = 'dskfe' Ответ MySQL: #1366 - Incorrect integer value: 'dskfe' for column 'category' at row 1 [/sql]
кстати в sprintf можно вставлять одну и ту же переменную в несколько мест - это плюс а как с этим в goDB ?
зачем вообще вызов доп. функции? в чём сокральный смысл? религиозные убеждения? а если у меня там 8 параметров, мне 8 строчек mysql_real_escape_string() нужно писать, или s() как ты предлагаешь? писал - торопился проверить, хотел по 8 строчек у каждого запроса добавить позже я говорю исключительно про обёртку. засунь туда поддержку memcached.. да хоть на диск сливай
пиши прямо в запросе всёравно у тебя mysql_real_escape_string 8 раз отработает а я что против доп. функций? я против sql шаблонов
Ну знаешь проще в одном единственном месте методе query в goDB прикрутить кэширование, чем потом по проекту в 100тыс.+ строк отлавливать все места с mysql_query Увы клянчил у vasa_c такую возможность (в моей допотопной либе, слизанной с примеров в книге Шлосснейгла для работы с БД, она была кстати, но она куда как медленней goDB работала).
ещё раз, кеширование делаешь в доп. функции (обёртке ) т.е. в методе query например, я как раз ЗА это но я говорю, что sql шаблоны в кешировании никак не помогают!
Ладно что-то я забил с этим спором на работу. Так что удаляюсь. Будем считать что все победили, т.к. каждый остался при своем мнении
хорошо =) итог такой, Вы используете sql шаблоны только потому что ВАМ так удобнее =) практической пользы они не приносят ну кроме как помогают не забыть обезопасить данные
и зачем мне столько раз писать? сколько она отработает - я не считаю, я давно уже не параноик, по теме вещей, которыми можно принбречь )) меня волнует краткость и удобность для себя любимого практическая польза - писать каждый сайт на C как модуль Апача а php мы используем только потому, что нам так удобнее )) короче действительно думаю пора закончить спор.
Mr.M.I.T., чорт ну никак не могу не откомментить. Что такое практическая польза? Появившеяся во многих языках автоматическая сборка мусора и выделения памяти тоже как бы практической пользы не приносит, но именно благодаря ней скорость разработки значительно ускорилась. Это спор из серии (ой чувствую ща еще один холивар будет) как автомат vs механическая коробка передач: В гоночной машине безусловно механическая рулит, а вот в 2-х часовой пробке до города?
так ты всёравно будешь писать ?s или как там я согласен что написать ?s это удобнее чем ".s($var)." но всёравно на метод запроса нужно переносить только обезвреживание данных, т.е. ББ коды и прочее нужно заменять ДО
29843+ mysq_real_escape_string по всему проекту офигенно функциональнее и гибче )) Так же как таскать за собой 2 или 3 ссылки на подключение при работе с несколькими БД и т.д. и т.п.
с mysq_real_escape_string я лично понял что без разницы, потому как мне например удобнее обезопасить данные перед запросом, кому-то удобнее написать ?s... но вот регулярки для парсинга sql шаблона... =\ Зачем? я же не против "обёртки" это всё в ней
я вообще не говорил как пишу лично я я просто говорю о том, что во всём есть свои плюсы и свои минусы, и всегда нужно выбирать исходя из ситуации, не впадая в параною, где без неё можно обойтись, и незыблимые теоритические аксиомы придуманные неизвестно кем потому что так какой-то авторитет когда-то сказал? обоснуй почему нужно :?: регулярки - действительно могут оказаться большим тормозом.. если запросов много и часто.. тут спору нет.. считать всё надо