Я припускаю, що ви маєте на увазі, що ви хочете остаточний запит SQL із значеннями параметрів, інтерпольованими в нього. Я розумію, що це було б корисно для налагодження, але це не так, як працюють підготовлені заяви. Параметри не поєднуються з підготовленою заявою на стороні клієнта, тому PDO ніколи не повинен мати доступ до рядка запиту в поєднанні з його параметрами.
Оператор SQL надсилається на сервер бази даних, коли ви готуєте (), а параметри надсилаються окремо при виконанні (). Загальний журнал запитів MySQL показує кінцевий SQL зі значеннями, інтерпольованими після виконання (). Нижче наведено уривок із мого загального журналу запитів. Я виконував запити від mysql CLI, а не з PDO, але принцип той самий.
081016 16:51:28 2 Query prepare s1 from 'select * from foo where i = ?'
2 Prepare [2] select * from foo where i = ?
081016 16:51:39 2 Query set @a =1
081016 16:51:47 2 Query execute s1 using @a
2 Execute [2] select * from foo where i = 1
Ви також можете отримати те, що хочете, якщо встановити атрибут PDO PDO :: ATTR_EMULATE_PREPARES. У цьому режимі PDO інтерполює параметри в SQL-запит і надсилає весь запит під час виконання (). Це не справжній підготовлений запит. Ви обходите переваги підготовлених запитів, інтерполюючи змінні в рядок SQL перед виконанням ().
Re коментар від @afilina:
Ні, текстовий запит SQL не поєднується з параметрами під час виконання. Тож PDO нічого не показує.
Внутрішньо, якщо ви використовуєте PDO :: ATTR_EMULATE_PREPARES, PDO робить копію запиту SQL та інтерполює в нього значення параметрів, перш ніж підготувати та виконати. Але PDO не виставляє цього зміненого запиту SQL.
Об'єкт PDOStatement має властивість $ queryString, але це встановлюється лише в конструкторі для PDOStatement, і він не оновлюється, коли запит буде переписаний з параметрами.
Було б розумним запитом на функцію PDO, щоб вони попросили їх викласти переписаний запит. Але навіть це не дасть вам "повного" запиту, якщо ви не використовуєте PDO :: ATTR_EMULATE_PREPARES.
Ось чому я показую вище вирішення питання використання загального журналу запитів сервера MySQL, тому що в цьому випадку навіть підготовлений запит із заповнювачами параметрів переписується на сервер із значеннями параметрів, заповненими в рядок запиту. Але це робиться лише під час ведення журналу, а не під час виконання запитів.