從PDO 準備語句中擷取原始SQL 查詢
在準備語句的上下文中,「原始字串 查詢」的概念並不簡單。當在準備好的語句上呼叫 PDOStatement::execute() 時,執行的 SQL 語句與準備好的語句本身不同。
存取插入參數值的最終 SQL 查詢並不是一個簡單的過程準備好的陳述所固有的。參數沒有與客戶端的prepared語句合併,導致PDO無法存取。
SQL語句在prepare()作業時傳送到資料庫伺服器,而參數在execute()時單獨傳輸)稱為。 MySQL 維護一個通用查詢日誌,該日誌顯示了執行()之後帶有嵌入值的最終 SQL。但是,此日誌位於 PDO 外部,並不代表「原始」查詢字串。
一種解決方法涉及設定 PDO 屬性 PDO::ATTR_EMULATE_PREPARES。在此模式下,PDO 在執行 SQL 查詢之前將參數插入 SQL 查詢。但是,此方法會損害準備好的語句的效率。
PDOStatement 物件的 $queryString 屬性可能看起來是潛在的解決方案,但它僅在物件初始化期間設置,並不反映參數插值。將重寫的查詢作為一項功能公開是有益的,但除非使用 PDO::ATTR_EMULATE_PREPARES,否則它仍然無法滿足要求。
利用 MySQL 伺服器的常規查詢日誌提供了一種解決方法,因為它記錄了重寫的查詢。儘管如此,這僅適用於日誌記錄期間,不適用於查詢執行。
以上是如何從 PDO 準備語句中擷取最終的參數插入 SQL 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!