Полагаю, вы имеете в виду, что вам нужен окончательный SQL-запрос со значениями параметров, вставленными в него. Я понимаю, что это было бы полезно для отладки, но это не то, как работают подготовленные операторы. Параметры не объединяются с подготовленным оператором на стороне клиента, поэтому PDO никогда не должен иметь доступа к строке запроса в сочетании с ее параметрами.
Оператор SQL отправляется на сервер базы данных, когда вы выполняете prepare (), а параметры отправляются отдельно, когда вы выполняете execute (). Общий журнал запросов MySQL показывает окончательный SQL со значениями, интерполированными после выполнения (). Ниже приведена выдержка из моего общего журнала запросов. Я запускал запросы из CLI mysql, а не из 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, поскольку в этом случае даже подготовленный запрос с заполнителями параметров перезаписывается на сервере, а значения параметров возвращаются в строку запроса. Но это делается только во время регистрации, а не во время выполнения запроса.