PDO MySQL:PDO::ATTR_EMULATE_PREPARES 的使用
雖然有人建議PDO 的準備模擬透過繞過MySQL 的本機查詢快取來增強效能,但這種說法對於現代版本的MySQL不再有效。從 MySQL 5.1.17 開始,prepared 語句可以有效利用查詢快取。
安全性與普遍看法相反,PDO::ATTR_EMULATE_PREPARES 不會影響 prepared 語句的安全性聲明。無論模擬設定如何,參數值都會一致地轉義以防止 SQL 注入。唯一的差別在於參數替換發生的位置。啟用模擬時,它發生在 PDO 庫中,而禁用模擬時,它發生在 MySQL 伺服器上。
錯誤回報使用本機準備的一個優點語句改進了錯誤報告。語法錯誤是在準備期間而不是執行期間檢測到的。這對於開發和調試目的是有益的。
其他注意事項另一個需要考慮的因素是使用本機準備語句的潛在成本。每個prepare()操作都會產生開銷,這可能會導致一次性準備好的語句的效能稍微降低。
建議基於最新版本的MySQL和PHP ,通常建議停用 PDO::ATTR_EMULATE_PREPARES。這確保了使用本機準備好的語句,提供更好的錯誤報告以及為多個連接重用查詢計劃的能力。
最佳實踐範例function connect_PDO($settings) { $dsn = 'mysql:' . implode(';', $dsnpairs); $dbh = new PDO($dsn, $settings['user'], $settings['pass'], $options); // Disable PDO emulation $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); return $dbh; }以下程式碼片段展示了具有首選設定的 PDO 連接函數,包括停用 PDO::ATTR_EMULATE_PREPARES:
以上是MySQL 中的 PDO::ATTR_EMULATE_PREPARES:啟用還是停用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!