Именованные плейсхолдеры
В прошлой главе мы в качестве потока входных данных использовали порядковый массив. Это удобно, когда нам нужно сформировать запрос из разрозненных данных. А когда это нужно сделать на основе уже готовой структуры, уже не так удобно.
$struct = array(
'name' => 'Вася',
'tmp' => 'tmp',
'surname' => 'Пупкин',
'id' => 10,
);
$pattern = 'UPDATE `users` SET `name`=?, `surname`=? WHERE `user_id`=?i';
$data = array($struct['name'], $struct['surname'], $struct['id']);
$db->query($pattern, $data);
Для этого есть особый формат плейсхолдеров — именованные.
$struct = array(
'name' => 'Вася',
'tmp' => 'tmp',
'surname' => 'Пупкин',
'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; и т.д.
При указании несуществующего ключа генерируется исключение.
В одном запросе могут использоваться только либо простые, либо именованные плейсхолдеры. Иначе — опять исключение.
Если простые плейсхолдеры обязаны выбрать все входные данные (иначе, опять исключение), то именованным это не обязательно. Входная структура может быть сколь угодно большой, а в запросе могут использоваться только определённые ключи.