Обновление вознаграждения : Уже получил очень хороший ответ от Марка. Адаптировано: = в:, ниже. Однако я все еще ищу подобные схемы помимо DBIx. Я' m просто заинтересован в совместимости с чем угодно .
Мне нужен совет по синтаксису, который я выбрал для "расширенных" заполнителей в параметризованных операторах SQL. Поскольку создание некоторых конструкций (предложений IN) меня беспокоило, я решил использовать несколько сокращений синтаксиса, которые автоматически превращаются в обычные? заполнители.
Они мне нравятся. Но я хочу упаковать его для распространения и спрашиваю себя, легко ли они понятны.
В основном мои новые заполнители - это ??
и :?
(перечисленные параметры) и : &
и :,
и : |
и ::
(для именованных заполнителей) со следующими вариантами использования:
-> db(" SELECT * FROM all WHERE id IN (??) ", [$a, $b, $c, $d, $e])
??
заменяется на ?,?,?,?,?, ...
в зависимости от количества $ args для моей функции db (). Этот довольно ясный, и его синтаксис уже вроде как стандартизирован. Perls DBIx :: Simple тоже его использует. Так что я почти уверен, что это приемлемая идея.
-> db(" SELECT :? FROM any WHERE id>0 ", ["title", "frog", "id"]);
// Note: not actually parameterized attr, needs cleanup regex
Признайте это. Смайлик мне просто понравился. Обычно этот заполнитель :?
заменяет ассоциативный $ args на простые имена столбцов. Фактически, он отбрасывает любые значения $ args. На самом деле это полезно для INSERT в сочетании с ??, а иногда и для предложений IN. Но здесь я уже задаюсь вопросом, разумен ли этот новый синтаксис или нет, потому что он смешивает: и? персонажи. Но почему-то кажется, что он хорошо соответствует синтаксической схеме.
-> db(" UPDATE some SET :, WHERE :& AND (:|) ", $row, $keys, $or);
Здесь мнемоника :,
расширяется до списка пар name =: name
, разделенных ,
запятые. В то время как : &
- это список столбцов =: столбцы, соединенные И
s. Для четности добавил : |
. У: & есть и другие варианты использования команд UPDATE.
или не просто неправильное название, потому что он смешивает: и? персонажи. Но почему-то кажется, что он хорошо соответствует синтаксической схеме.
-> db(" UPDATE some SET :, WHERE :& AND (:|) ", $row, $keys, $or);
Здесь мнемоника :,
расширяется до списка пар name =: name
, разделенных ,
запятые. В то время как : &
- это список столбцов =: столбцы, соединенные И
s. Для четности добавил : |
. У: & есть и другие варианты использования команд UPDATE.
или не просто неправильное название, потому что он смешивает: и? персонажи. Но почему-то кажется, что он хорошо соответствует синтаксической схеме.
-> db(" UPDATE some SET :, WHERE :& AND (:|) ", $row, $keys, $or);
Здесь мнемоника :,
расширяется до списка пар name =: name
, разделенных ,
запятые. В то время как : &
- это список столбцов =: столбцы, соединенные И
s. Для четности добавил : |
. У: & есть и другие варианты использования команд UPDATE.
Мы добавили : |
. У: & есть и другие варианты использования команд UPDATE.
Мы добавили : |
. У: & есть и другие варианты использования команд UPDATE.
Но мой вопрос не в полезности, а в том, что:, и: & кажутся запоминаемыми?
-> db(" SELECT * FROM all WHERE name IN (::) ", $assoc);
Хотя после некоторых я также добавил ::
для интерполяции : named,: value, : list
очень похож на ??
расширяется до ?,?,?
. Подобные варианты использования, и разумно иметь для единообразия.
В любом случае, реализовал ли кто-нибудь еще такую схему? Различные заполнители? Или что бы вы посоветовали для простоты? Обновление: Я знаю, что интерфейс PHP Oracle OCI также может связывать параметры массива, но не использует для этого специальные заполнители. И я ищу сопоставимые синтаксисы заполнителей.