2012-05-16 109 views
10

PDO可以選擇PDO::ATTR_EMULATE_PREPARES,該選項控制是否只有在數據庫不支持或者始終支持的情況下才應該模擬預準備語句。但是,它並沒有提及它是否總是默認模擬它們。默認情況下,PDO是否總是使用模擬的預處理語句?

通常人們會認爲仿真僅在必要時使用,但因爲它是PHP沒有什麼可以假設只是因爲它是理智......

+2

可以告訴我什麼是仿真意思?它可能會有多糟糕? – Shubham

+1

在' - > prepare()'調用期間不會出現錯誤檢查,並且PDO需要轉義您的參數,而不是將它們單獨發送到數據庫。它也不會從數據庫在您準備語句並執行多次時可能執行的優化中獲益。 – ThiefMaster

回答

14

取決於數據庫驅動程序。它們默認爲MySql模擬的always(儘管您可以手動關閉該選項);在Postgres中,正確的默認設置是detected dynamically

+1

這是令人困惑的。您的代碼引用說明的內容與文檔不同:_PDO_MYSQL將利用MySQL 4.1及更高版本中提供的本地準備語句支持。如果您使用的是舊版本的mysql客戶端庫,PDO會爲您效仿它們._(http://www.php.net/manual/en/ref.pdo-mysql.php) – CodeZombie

+3

@ ZombieHunter:If該代碼說明與文檔不同的東西,顯然文檔(或其解釋)是錯誤的。在這個具體的情況下,恕我直言,它應該閱讀「**可**利用」。文檔始終是錯誤的(PHP比其他人更頻繁,典型情況是...... *嘆氣*);我忘了自己在文檔中發現了多少次*徹底的謊言*。 – Jon

+1

我知道我寧願相信你引用的代碼,也不願意相信它。這實在是一種痛苦,你必須在信任之前檢查所有的PHP: -/ – CodeZombie

相關問題