2011-09-14 61 views
3

在完成了一項關於互聯網的研究(以及在Stackoverflow)之後 - 我仍然在努力確定哪種方法最適合我學習/使用,在PHP編程時挖掘更多。PHP | PEAR:MDB2 vs PDO vs Native-PHP(原始)

我明白一些使用DAO的優勢,當處理數據庫時使用直接使用mysql_ *函數分佈在應用程序文件中。

當涉及到決定MDB2與PDO - 有一件事情,PDO的閃耀是事實,它不抽象的mysql_ *函數直接與mysql的API API會談,就像mysql_ *一樣。它也是PHP編譯後的C擴展,因此速度非常快。儘管MDB2(或其他庫)是用PHP編寫的,所以它們需要在運行時進行解析並位於mysql_ *函數之上。那麼,就速度而言,PDO贏得了?!?

當談到在本機非抽象的PHP比較DB抽象層方式眼前一亮DB抽象層的 安全優勢,在使用粘合劑PARAMS(預處理語句)的方式,將防止大多數SQL注入攻擊,如果有需求/請求 - 即使它不常見 - (在這些DAO庫中還有其他優點和很好的時間消耗功能),將來可以更容易地切換RDBMS類型。

無論如何,我希望有專家可以幫助我決定,而我應該使用其中一個庫,如果是,哪一個是最值得推薦的?或者我應該編寫自己的DAO庫,以便通過我所有的項目都會在幾年後得到改善?

謝謝。

+0

PDO可能有一個編譯組件,但它仍然做了很多處理,'原始'接口沒有。仍然有開銷,但在不同的地方。你會從這裏得到的唯一好的答案是嘗試pdo v.s. mdb2 v.s. 「生」,看看哪一個在你的特定情況下更好。 –

+0

我的確練習過PEAR:MDB2 - 兩難之間是使用其中一個庫(MDB2,PDO,ADOdb ..),如果是這樣,最好推薦哪一個(因爲它們基本都是爲了相同的目的而用一點語法不同的),還是我應該抽象我自己的DAO - 這樣我才能確切知道代碼的外觀,我可以完全控制它,而不是依靠三維代碼?!?另外從我所瞭解的PDO中執行其他庫會導致他直接與數據庫進行通信,而不是通過構建在mysql_ *函數之上的一些抽象 – Adam

+0

mysql _ *()不是抽象。他們直接調用底層libmysql客戶端庫,就像PDO一樣。 mysql _ *()只是更直接地映射到庫調用。 –

回答

4

問自己的問題:

  • 是我的代碼的瓶頸,或者是數據庫?當你對數據庫進行數以千計的簡單查詢時,慢php代碼是一個問題。當你每個請求只做幾十個查詢時,db層的開銷可能不會很明顯
  • 你是否需要切換到不同的數據庫系統?如果您爲有明確要求的客戶完成工作,那麼您很可能無論如何都會鎖定DMBS,而且您不必關心互操作性。

另外,MDB2現在已經很年老了。如果我是你,我會使用Doctrines DBAL--它可以在沒有Doctrine本身的情況下使用,並且它位於PDO之上。我不會使用舊的「native」mysql_ *函數。

+0

所以基本上你更喜歡在大多數情況下使用抽象層,除了那些對數據庫有超過幾十個查詢的情況外,你建議儘可能避免使用「native:mysql _ *()」函數,即使在抽象自己的數據庫類抽象層庫? 從來沒有聽說過關於學說DBAL - 如果坐在PDO之上 - 爲什麼只是使用PDO,因爲缺乏功能? 很好的知道MDB2是舊的,我第一次聽說它。 謝謝! – Adam