Skip to content
Oleg Grigoriev edited this page Mar 26, 2016 · 4 revisions

Именованные плейсхолдеры

В прошлой главе мы в качестве потока входных данных использовали порядковый массив. Это удобно, когда нам нужно сформировать запрос из разрозненных данных. А когда это нужно сделать на основе уже готовой структуры, уже не так удобно.

$struct = [
    'name' => 'Vasya',
    'tmp' => 'tmp',
    'surname' => 'Pupkin',
    'id' => 10,
];
$pattern = 'UPDATE `users` SET `name`=?, `surname`=? WHERE `user_id`=?i';
$data = [$struct['name'], $struct['surname'], $struct['id']];
$db->query($pattern, $data);

Для этого есть особый формат плейсхолдеров — именованные.

$struct = [
    'name' => 'Vasya',
    'tmp' => 'tmp',
    'surname' => 'Pupkin',
    'id' => 10,
];
$pattern = 'UPDATE `users` SET `name`=?:name, `surname`=?:surname WHERE `user_id`=?i:id';
$db->query($pattern, $struct);

?:name — плейсхолдер для вставки элемента массива с ключом name.

Вставлять один и тот же элемент можно сколько угодно раз: name=?:name, surname=?:name.

Указание типа плейсхолдера с именем и модификаторами, уживаются следующим образом: ?:name, ?set:name, ?query:name;, ?lin:name, ?list-int:name и т.д.

При указании несуществующего ключа генерируется исключение.

В одном запросе могут использоваться только либо простые, либо именованные плейсхолдеры. Иначе — опять исключение.

Если простые плейсхолдеры обязаны выбрать все входные данные (иначе, вновь исключение), то именованным это не обязательно. Входная структура может быть сколь угодно большой, а в запросе могут использоваться только определённые ключи.

Clone this wiki locally