PHP Класс для работы с плейсхолдерами в SQL

ksnk

прохожий
Ok! Тоесть, все строковые константы содержащие : нужно будет выкидывать в данные?
Код:
update users set descr="пара admin:password" where name=s:user
 

AmdY

Пью пиво
Команда форума
Ok! Тоесть, все строковые константы содержащие : нужно будет выкидывать в данные?
Код:
update users set descr="пара admin:password" where name=s:user
нет, просто данные нужно вставлять через плейсхолдер
PHP:
sql('update users set descr=s:descr where name=s:user', "пара admin:password", "foo");
 

vasinsky

Новичок
Ok! Тоесть, все строковые константы содержащие : нужно будет выкидывать в данные?
в моём варианте - в запросе есть сам запрос и плейсхолдеры - вида тип : ключ массива
туда не предусмотрена вставка данных на прямую.

а так как парситься только текст sql запроса - то там не будет путаницы с ":"
 

ksnk

прохожий
угу. про разделение мух и котлет кто-нибудь вспомнит?
Исполнять запрос может тот, кому про запрос знать не нужно, например сам запрос выбираем из списка запросов с сортиовкой товаров по цене, дате и фазе луны (массив из нескольких, с единым пулом параметров). А тут ему(исполнителю запросов) вдруг придется объяснять, что именно вот для этого запроса, конкретно, нужно дописать в параметры еще пару значений? Годный получается гвоздик.
 

ksnk

прохожий
Решение то простое, не парсить "закавыченые" значения в запросе. Считать, что там ничего плейсхолдерного нет

Ну или придумать способ "экранирования", это тоже будет работать, но, imho, хуже.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
ksnk, нет, такое не нужно. Вы либо используете плейсхолдеры, либо пишите SQL ручками. Можно хоть один юзкейс в котором оправдана мешанина?
Код:
select *, to_char(article_date, 'DD.MM.YYYY HH24:MI') AS article_date_fmt from articles where article_id = :id
 

vasinsky

Новичок
с начала подготавливается запрос - путём замены плейсхолдеров на значения
а потом уже
исполнитель запроса получит сам текст sql запроса, всё как обычно
 

vasinsky

Новичок
у меня обрабатывается

PHP:
$data = array(
    'id' => 102,
);

echo $stmt->plhdr("select *, to_char(article_date, 'DD.MM.YYYY HH24:MI') AS article_date_fmt from articles where article_id=i:id" , $data);
Код:
select *, to_char(article_date, 'DD.MM.YYYY HH24:MI') AS article_date_fmt from articles where article_id=102
 

ksnk

прохожий
vasinsky, исполнитель запроса , в моем примере, тот кто вызывает парсер-исполнитель с нужными параметрами.
 

vasinsky

Новичок
а вот если твоё поделие заставить принимать их в обоих
если да кабы..

вообще - я не вижу проблемы - обозначать плейсхолдеры так - что ои будут отличаться от вариантов в тексте
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Sad Spirit, там не в регистре "работа", а в фиксированном комплекте типов ;)
Ну и это тоже, да. Но у меня задача была не подловить коллегу vasinsky, а показать коллеге hell0w0rd невырожденный пример со строкой-похожей-на-подстановку в запросе.
 

ksnk

прохожий
А вот еще хотелось бы иметь возможность указывать префикс таблицы, навроде `?_table`. Префикс подсовывать шаблонизатору при его создании.
Вероятно, будет полезен тип массив-со-значениями-такоготипа-выводим-через-запятую
 

riff

Новичок
А вот еще префикс таблицы, навроде `?_table`
Вероятно, будет полезен тип массив-со-значениями-такоготипа-выводим-через-запятую
а. Этот класс был написан, как я понял, "на спор", так что, думаю расширение ему не светит.
б. В классе Фаната (или в моей переделке этого класса не помню сейчас) это есть, почему не пользуешься?
в. Если и делать, то без этих дебильных кавычек `, парсер сам их должен расставить.
 

ksnk

прохожий
a. riff, язык получается достаточно удобный и компактный. "Префиксное" указание типа, оказывается, очень удачно укладывается в шаблоны. Почему бы сам язык не потестировать на применимость? А конкретная реализация непринцииальна. Все, что занимает 200-300 строк может быть воспроизведено в любой момент за день работы.
б. Пользуюсь. У меня есть свой аналог "класса Фаната" :) По языку приблизительная совместимость с котеровским dbSimple, с некоторыми вкусными лично мне дополнениями - параметры с номером и параметры массивы-с-шаблоном-вывода. Где-то здесь была тема про это.
в. Мне больше нравится подход Котерова в этом вопросе - шаблоны вне кавычек. Хотя пропарсить именно префикс таблиц - в аквычках он или нет, довольно просто, чуть более сложная регулярка.
 

vasinsky

Новичок
то без этих дебильных кавычек `
это обратные апострофы))
а одинарные кавычки, как все привыкли их называть - апострофы.

префикс - можно без проблем переменной указать.

класс написан не на спор)) - а так - что за гусь тут нарисвался.

как и говорил - я не рекомендую использовать этот класс, стандартные фишки на много больше функционала содержат.
 
Сверху