флейм. плейсхолдеры для sql

Marquis

Новичок
флейм. плейсхолдеры для sql

Собсна вопрос заключается в том, какую пользу можно извлечь из сабжа?
По какой причине и самое главное кому нужны эти монстры называемые "плейсхолдерами для sql". Сейчас под руку попалась Котеровская библиотека DBSimple, первое что увидел это не совсем вменяемый функционал называемый конструктором sql запросов.
какой смысл в запросе указывать всякие там символы ("#", "?") заменяемые в конструкторе на названия таблиц и филдов. imho подобный функционал только усложняет чтение sql запросов, а благодаря "студентам" и их кривым рукам приходится ломать глаза читая запросы составленные по всем мыслимым и не мыслимым правилам этого конструктора.

Просьба к тем кто использует подобные конструкторы объяснить мне тайный смысл сего функционала, ибо после двух суток правки "системы управления" написанной "студентом" хочется застрелиться. :(
 

denver

?>Скриптер
какую пользу можно извлечь из сабжа?
Если тебе пофиг на mysql_real_escape_string для каждого строкового поля и на необходимость об этом постоянно помнить и т.п. то... застрелись.
 

tf

крылья рулят
http://dklab.ru/lib/Database_Placeholder/
SiMM, это все очень хорошо, только у меня вопрос по производительности?
как она, тут ведь похоже на решается с помощью постоянныx регулырных выражений, не слишком уж тормазить будет при постоянном использовании подобных контрукций?
 

hermit_refined

Отшельник
tf
По сравнению со временем выполнения запросов к БД - это мелочи. К тому же такое легко можно переписать на C ;-)
 

Solid

Drosera anglica
Marquis
Placeholder'ы созданы для облегчения труда программиста, а так же для более удобочитаемого и безопасного кода (тем, кто ещё не знает об этой практике или же ещё не использует, в связи со своими псевдодомыслами о диких тормозах и сложности, - сильно сочувствую).

Пара способов:
1) prepare/execute (http://pear.php.net/package/DB, mysqli)
2) inQuery placeholders (http://dmitry.eu/files/php/mysql_pquery.function.phps)
 

tf

крылья рулят
Фанат, зачем? я просто спросил как нормально?
я тут думаю развивать дальше что-то свое или бонально использовать чужое...
 

kruglov

Новичок
По мне, так mysql_real_escape_string использовать в каждом месте "не в падлу", в крайнем случае ему можно какой-нибудь алиас покороче сделать. А пальцем считать, которому плейсхолдеру какая переменная соответствует, тоже удовольствия мало.

А насчет забыть где-нибудь - так это как руки после грязи не помыть - как же, забудешь, когда они "зудят". Привычка.
 

Solid

Drosera anglica
Андрейка
Да.

-~{}~ 27.10.06 12:16:

kruglov
Запросы в placeholder'ах легче читаются.
Об ошибках - знаете, всякое бывает... дебагить всяко легче.
 

Solid

Drosera anglica
Андрейка
Код:
SELECT a,b FROM table WHERE a=? AND d LIKE CONCAT('%', ?, '%') LIMIT 2,?
или
Код:
mysql_pquery('SELECT a,b FROM table WHERE a=? AND d LIKE ? LIMIT 2,?', 5, sprintf('%%%s%%', 'string'), 10);
 

Андрейка

Senior pomidor developer
Solid
ага, пасиб ) зато запросы легче читаются ) а не проще ли тогда вместо твоей фигни использовать sprintf сразу?

ЗЫ. вместо параметров идут необработанные данные из $_REQUEST
 

camka

не самка
Я бы тут отметил, что стандартный механизм prepared statements в mysqli поддерживает только server side prepared statements, что значит, что при (1)mysqli_prepare шаблон запроса отправляется на сервер (2)mysqli_stmt_bind_param опять же напоравляет аргументы на сервер, (3)mysqli_bind_result, если нужно, снова общается с сервером, и , наконец, (4)mysqli_stmt_execute сообщает серверу, что стоит выполнить запрос. И того 3-4 обращения к серверу базы данных на один запрос, в сравнении с mysqli_query, где отсылка осуществляется в один прием.

Этим я лишь хочу сказать, что для единоразовых запросов использование плейсхолдеров для mysqli не достаточно оправдано, что, конечно, не значит, что этот механизм есть бессмысленный - при необходимости выполнения одного и того же запроса, но с разными параметрами более одного раза prepared statements довольно значимо ускоряют запросы.

Вывод - плейсхолдеры имеют слишком сильную привязку к prepared statements-ам (как они по-русски то? подготавливаемые запросы?) в mysqli, от чего страдают. Если б была возможность client side prepared statements, было бы удобней и приятней.
 

Андрейка

Senior pomidor developer
Solid
а никак не надо.. всеми этими проблемами (обработка и прочая фикня) должна занимацца твоя мегафункция.. она занимаецца?
 
Сверху