Intereting Posts
Могу ли я получить пользовательский формат даты для сбора (списков) на Laravel5? php Изменить порядок массива Управление магазином и складом Как проверить, введен ли session_start? PDO: недопустимый номер параметра: смешанные и позиционные параметры Отправка электронной почты от PHPMailer с использованием IP-адресов прокси Включение файлов с использованием относительных путей с PHP? Как я могу обновить две таблицы в одном запросе? Рекурсивная функция для генерации многомерного массива из результата базы данных sprintf, используя одни и те же значения несколько раз Установление подключения к базе данных в php с использованием одноэлементного класса Как добавить динамическое текстовое поле (строка) и сохранить в базу данных с помощью PHP Проверьте, поступает ли запрос из приложения Windows Сортировка красноречивой коллекции by created_at Установка Laravel в подпапке

Подготовленный отчет PHP PDO: могу ли я использовать один заполнитель несколько раз?

Я хотел бы выполнить следующий запрос:

     ВЫБРАТЬ
       *,
       (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 и т. Д.