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

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


$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; и т.д.

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

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

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

© Григорьев Олег aka vasa_c, 2006—2010