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

  • Автор темы Автор темы vasinsky
  • Дата начала Дата начала
Ok! Тоесть, все строковые константы содержащие : нужно будет выкидывать в данные?
Код:
update users set descr="пара admin:password" where name=s:user
 
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");
 
Ok! Тоесть, все строковые константы содержащие : нужно будет выкидывать в данные?
в моём варианте - в запросе есть сам запрос и плейсхолдеры - вида тип : ключ массива
туда не предусмотрена вставка данных на прямую.

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

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

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
 
vasinsky, исполнитель запроса , в моем примере, тот кто вызывает парсер-исполнитель с нужными параметрами.
 
а вот если твоё поделие заставить принимать их в обоих
если да кабы..

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

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

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

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