Предполагам, че имате предвид, че искате окончателната SQL заявка, със стойности на параметри, интерполирани в нея. Разбирам, че това би било полезно за отстраняване на грешки, но не е начинът, по който работят подготвените оператори. Параметрите не се комбинират с подготвен оператор от страна на клиента, така че PDO никога не трябва да има достъп до низа на заявката, комбиниран с неговите параметри.
SQL операторът се изпраща на сървъра на базата данни, когато правите подготовка(), а параметрите се изпращат отделно, когато правите execute(). Общият дневник на заявките на 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 низа преди execute().
Повторен коментар от @afilina:
Не, текстовата SQL заявка е не комбинирани с параметрите по време на изпълнение. Така че няма какво да ви покаже PDO.
Вътрешно, ако използвате PDO::ATTR_EMULATE_PREPARES, PDO прави копие на SQL заявката и интерполира стойностите на параметрите в нея, преди да извърши подготовката и изпълнението. Но PDO не разкрива тази модифицирана SQL заявка.
Обектът PDOStatement има свойство $queryString, но това е зададено само в конструктора за PDOStatement и не се актуализира, когато заявката е пренаписана с параметри.
Би било разумно изискване за функция PDO да ги помоли да разкрият пренаписаната заявка. Но дори и това няма да ви даде "пълната" заявка, освен ако не използвате PDO::ATTR_EMULATE_PREPARES.
Ето защо показвам заобикалянето по-горе при използването на общия регистър на заявките на MySQL сървъра, тъй като в този случай дори подготвена заявка с заместващи параметри се пренаписва на сървъра, като стойностите на параметрите се запълват обратно в низа на заявката. Но това се прави само по време на регистриране, а не по време на изпълнение на заявка.