Я хотел бы выполнить следующий запрос:
ВЫБРАТЬ *, (SELECT COUNT (*) FROM `tab2` WHERE` parent` = : id ) AS `sum` FROM `tab1` WHERE `id` = : id
Как вы можете видеть :id
placeholder появился дважды в запросе. Поэтому, если я попытаюсь выполнить это утверждение с помощью:
$q->execute(['id'=>$row_id]);
Я получаю сообщение об ошибке:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number
Поэтому я должен переписать подготовленный запрос и выполнить массив с помощью: id1 и: id2 placeholders, который выглядит немного глупо для меня.
Это единственный способ использовать один заполнитель в нескольких местах подготовленного заявления?
PDO :: prepare утверждает, что
[y] ou не может использовать маркер именованного параметра с тем же именем более одного раза в подготовленном операторе, если только режим эмуляции не включен.
Так как обычно лучше отключить режим эмуляции (поэтому база данных делает подготовленный оператор), вам придется использовать id_0
, id_1
и т. Д.