2012-07-26 22 views
4

聲明:此問題是嚴格有關支持MySQL和數據庫抽象層。PDO和MySQLi在抽象層下使用MySQL函數嗎?

該PHP網站注意到,使用PHP的mysql_函數不受歡迎。它反而鼓勵開發人員使用PDOMySQLi

這裏是我的問題:關於mysql,在所有抽象下,PDO和MySQLi只是爲mysql_函數提供更安全,更面向對象的包裝?

如果這是真的,是不是像CodeIgniter和Symfony這樣的框架通過在MySQLi之上放置一個圖層來創建不必要的包裝量,然後將圖層放置在本地PHP mysql_之上?

如果不是這樣,我想知道爲什麼有經驗的開發人員不鼓勵使用mysql_以及PDOMySQLi實際上在抽象下做了什麼。

(另外,請不要告訴我去看看代碼)會給+100賞金。

回答

2

這裏是我的問題:關於mysql,在所有的抽象下,PDO和MySQLi只是爲mysql_函數提供更安全,更面向對象的包裝?

不。像xdazz說的那樣,MySQLi和PDO都是用C實現的,這意味着它們不僅僅包裝mysql_ *函數。

如果這是真的,是不是像CodeIgniter和Symfony這樣的框架通過在MySQLi之上放置一個圖層來創建不必要的包裝量,然後將圖層置於本機PHP mysql_之上?

還有另一個理由認爲:笨和Symfony的可能創造了超過默認的界面接口,因爲默認界面是遠遠不夠的使用(從他們的角度來看)。我自己寫了一個PDO層,它設置了一些默認設置(例如錯誤模式,因爲PDO默認是安靜的)並且完全構建了一個更直觀的API。 PDO是一個非常體面的軟件,但setAttribute($attr, $value)只是不是我的一杯茶,真的。

1

沒有,PDO和庫MySQLi不屬於mysql_功能,它們是用C級實現,不同的擴展包裝。

試想,如果是包裝,--with-mysqli等是沒有必要的。

2

PDOMySQLi fucnctions和類方法是綁定到C級API。一般來說,建議使用,因爲準備的語句這個功能:in PDOin MySQLi。使用預準備語句是防止SQL注入的好方法。