2013-10-15 2 views
-1

pg_prepare() получает предварительную часть SQL, которая, в свою очередь, будет заполнена параметрами, используя pg_execute().Получить полученный SQL из pg_execute()

Есть ли способ получить этот итоговый SQL, чтобы я мог его распечатать и отладить?

+0

Я думаю, что PDO позволяет это, сбросив инструкцию или объект результата. Не уверен в '' функциях 'pg_ *'. Также обратите внимание, что вы можете настроить сервер для регистрации запросов. –

+0

Аргумент запроса, переданный в 'pg_prepare', переносится на сервер postgres точно так же, как представляется PHP-кодом, включая« $ N ». Не происходит перезаписи или последующей обработки. Можете ли вы привести примеры того, что вы хотите напечатать в качестве вывода отладки? –

+0

В примере я перехожу к pg_prepare() 'SELECT * FROM mytable WHERE pk = $ 1', тогда pg_execute() даст мне SELECT * FROM mytable WHERE pk = 50'. Затем я печатаю эту строку, чтобы проверить, правильно ли она заполнена. – Hikari

ответ

2

Возможно, нет, поскольку подготовленные операторы являются серверной вещью. Из документации по адресу http://www.postgresql.org/docs/9.3/static/sql-prepare.html:

Готовый оператор - это серверный объект, который может использоваться для оптимизации производительности. Когда выполняется оператор PREPARE, указанный оператор анализируется, анализируется и переписывается. Когда впоследствии выдается команда EXECUTE, готовый отчет планируется и выполняется. Это разделение труда позволяет избежать повторного анализа анализа анализа, позволяя при выполнении плана выполнения зависеть от заданных значений параметров.

Это означает, что даже сервер не «заполняет» данные в исходной строке, а анализирует и «компилирует» инструкцию в процессе ее подготовки, а затем передает как скомпилированный оператор, так и данные для планировщика.

Смежные вопросы