到目前爲止,我對PDO的理解是,PDO將在真實準備的語句可用的地方使用它,並在不能使用的地方模擬它們。我還了解到,在涉及mysql的情況下,如果您正在與支持它們的mysql版本進行通信,則會使用真實的準備好的語句。PDO,Mysql和本地準備的語句
事實上,MySQL PDO驅動程序的PHP手冊頁也是這麼說的。 http://php.net/manual/en/ref.pdo-mysql.php
但是,在另一個SO問題上,我在How to replace all occurencies of char with elements from array?上提供了幫助,有人提出這樣的說法並非如此,事實上PDO在與MySQL數據庫交談時模擬準備好的語句。
我沒有太多的運氣找到證據來支持那裏的聲明,但我確實發現有一個PDO :: ATTR_EMULATE_PREPARES屬性可以配置爲切換準備好的語句模擬。
所以事情的真相是什麼? PDO是否真的不使用MySQL準備好的語句?如果沒有,是否可以被迫這樣做,如果是的話,你應該這樣做嗎?我一直認爲,正如手冊中所聲稱的,由於mysql具有PDO將使用它們的真實準備語句。手冊是否不準確?
編輯添加:我最近閱讀了一些文章,至少給出了一個合理的理由,說明爲什麼實際準備好的查詢默認是禁用的。 PHP腳本通常是短暫的,只能運行足夠長的時間才能生成對請求的響應,然後解除分配所有資源。對於任何查詢,每個請求只執行一次,你實際上必須執行2條SQL命令(prepare命令和execute命令),因此對於只執行一次的準備好的語句,實際上可能會比仿真的性能稍差準備好聲明。對於必須在循環中運行的查詢,實際準備的語句可能會表現更好,但這種情況在PHP通常用於的請求/響應模型類型中相對較少。
我仍然認爲實際準備好的聲明是可取的,但至少我有一個合理的解釋,爲什麼PDO默認使用模擬查詢。
感謝您的回覆。但它確實乞討的問題,但如果它支持它,那麼爲什麼它默認關閉? – GordonM
這是兼容性問題,我相信。 –