PDO::ATTR_EMULATE_PREPARES 是影響效能和安全性的關鍵 MySQL 屬性。了解其細微差別對於做出明智的決策至關重要。
人們曾經認為,由於 MySQL 的本機預先準備語句繞過查詢緩存,啟用模擬可以提高效能。然而,MySQL 5.1.17(及更高版本)允許準備好的語句利用查詢緩存,有效地消除了這種效能差異。
與模擬相比,本機準備沒有提供額外的安全優勢。這兩種方法都可以有效地轉義查詢參數,確保防止 SQL 注入漏洞。
停用模擬可能會在準備時觸發語法錯誤,而模擬會在執行過程中向使用者發出警報。這種差異可能會影響錯誤處理和偵錯過程。
由於其固定的準備成本,與本機準備相關的性能開銷很小。如果不重複使用準備好的語句對象,模擬可能會更有效。
根據您引用的最新 MySQL 和 PHP 版本,建議停用 PDO ::ATTR_EMULATE_PREPARES。這將確保最佳的錯誤報告並盡可能利用查詢快取的優勢。
要簡化您的設置,請考慮使用如下所示的連接函數,該函數設定建議的屬性:
function connect_PDO($settings) { $dbh = new PDO($dsn, $settings['user'], $settings['pass'], $options); $serverversion = $dbh->getAttribute(PDO::ATTR_SERVER_VERSION); $emulate_prepares = (version_compare($serverversion, '5.1.17', '<')); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate_prepares); return $dbh; }
以上是MySQL 中的 PDO::ATTR_EMULATE_PREPARES:模擬還是不模擬?的詳細內容。更多資訊請關注PHP中文網其他相關文章!