2013-10-15 62 views
-1

pg_prepare()接收到一個初步的SQL部分,該部分將依次使用pg_execute()填充參數。從pg_execute()中檢索結果SQL

有沒有辦法得到結果SQL,以便我可以打印和調試它?

+0

我認爲PDO允許通過傾銷語句或結果對象。不確定「pg_ *」系列函數。另請注意,您可以配置服務器以記錄查詢。 –

+0

傳遞給'pg_prepare'的查詢參數完全按照包含'$ N'佔位符的PHP代碼提交的內容轉移到postgres服務器。不發生重寫或後期處理。你可以舉例說明你想打印爲調試輸出嗎? –

+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命令時,準備好的語句將被計劃並執行。這種分工避免了重複的解析分析工作,同時允許執行計劃取決於提供的特定參數值。

這意味着即使服務器沒有「填充」原始字符串中的數據,但在準備過程中解析和「編譯」語句,然後傳遞編譯語句和數據對策劃者。