-
Notifications
You must be signed in to change notification settings - Fork 11
named
В прошлой главе мы в качестве потока входных данных использовали порядковый массив. Это удобно, когда нам нужно сформировать запрос из разрозненных данных. А когда это нужно сделать на основе уже готовой структуры, уже не так удобно.
$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
и т.д.
При указании несуществующего ключа генерируется исключение.
В одном запросе могут использоваться только либо простые, либо именованные плейсхолдеры. Иначе — опять исключение.
Если простые плейсхолдеры обязаны выбрать все входные данные (иначе, вновь исключение), то именованным это не обязательно. Входная структура может быть сколь угодно большой, а в запросе могут использоваться только определённые ключи.