Предполагаю, вы имеете в виду, что вы хотите получить окончательный SQL-запрос с параметрическими значениями, интерполированными в него. Я понимаю, что это было бы полезно для отладки, но это не так, как работают подготовленные заявления. Параметры не объединены с подготовленным оператором на стороне клиента, поэтому PDO никогда не должен иметь доступ к строке запроса в сочетании со своими параметрами.
Оператор SQL отправляется на сервер базы данных при подготовке ( ), и параметры отправляются отдельно, когда вы выполняете (). Общий журнал запросов 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 ().
Re comment from @afilina:
Нет, текстовый SQL-запрос не в сочетании с параметрами во время выполнения. Таким образом, PDO не показывает вам.
Внутренне, если вы используете PDO :: ATTR_EMULATE_PREPARES, PDO создает копию SQL-запроса и интерполирует значения параметров в него перед выполнением подготовки и выполнения. Но PDO не предоставляет этот модифицированный SQL-запрос.
Объект PDOStatement имеет свойство $ queryString, но это устанавливается только в конструкторе для PDOStatement, и оно не обновляется, когда запрос переписывается с параметрами.
Это будет разумный запрос функции для PDO, чтобы попросить их разоблачить перезаписанный запрос. Но даже это не даст вам «полный» запрос, если вы не используете PDO :: ATTR_EMULATE_PREPARES.
Вот почему я показываю обходное решение выше, используя общий журнал запросов MySQL, поскольку в этом случае даже готовый запрос с записями параметров перезаписывается на сервере, а значения параметров возвращаются в строку запроса. Но это делается только во время ведения журнала, а не во время выполнения запроса.
Решение состоит в том, чтобы использовать аннотацию @ConditionalOnExpression
со значением по умолчанию в заполнителе свойства:
@ConditionalOnExpression("'${dlcm.module.auth.enable:false}' == 'false'")