首頁 > 後端開發 > php教程 > PDO MySQL 的 `PDO::ATTR_EMULATE_PREPARES`:啟用還是停用?

PDO MySQL 的 `PDO::ATTR_EMULATE_PREPARES`:啟用還是停用?

Susan Sarandon
發布: 2024-12-28 00:48:10
原創
848 人瀏覽過

PDO MySQL's `PDO::ATTR_EMULATE_PREPARES`: To Enable or Disable?

PDO MySQL:啟用或停用 PDO::ATTR_EMULATE_PREPARES

簡介

介紹PDO,一個關鍵的決定是啟用還是停用PDO::ATTR_EMULATE_PREPARES。本文根據性能和安全性的具體問題探討了權衡和建議。

效能注意事項

啟用模擬 (EMULATE_PREPARES = true)

    模擬透過利用利用程式模擬快取。

停用模擬(EMULATE_PREPARES = false)

    原生MySQL 準備好的語句可以透過最佳化查詢規劃和開銷prepare() 。

安全性注意事項

    模擬對安全性沒有影響。本機準備語句和模擬準備語句都可以有效地防止 SQL 注入。

錯誤回報

    使用本機準備語句,在準備期間會發生語法錯誤,而在模擬中,它們發生在執行時。

其他注意事項

    對於 5.1.17 以下的 MySQL 版本,查詢快取不適用於本機準備好的語句。
  • 重用準備好的語句可以提高本機準備好的語句的性能,但應該仔細考慮以進行模仿

建議

基於上述考慮,提出以下建議:

    針對5.1 以下的MySQL版本.17,模擬準備好的語句(EMULATE_PREPARES = true)。
  • 對於MySQL 版本 5.1.17 及更高版本,停用模擬 (EMULATE_PREPARES = false) 以最佳化效能和錯誤報告。

範例連接函數

要實作這些建議,請考慮使用以下連接函數:

<?php
function connect_PDO($settings)
{
    $dbh = new PDO(
        'mysql:' . implode(';', $settings),
        $settings['user'],
        $settings['pass'],
        [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => (version_compare($dbh->getAttribute(PDO::ATTR_SERVER_VERSION), '5.1.17', '<'))
        ]
    );

    return $dbh;
}
登入後複製
透過修改PDO::ATTR_EMULATE_RRES根據您的MySQL 版本進行設置,可以在效能和安全性之間取得最佳平衡。

以上是PDO MySQL 的 `PDO::ATTR_EMULATE_PREPARES`:啟用還是停用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板