2010-02-03 116 views

回答

37

這些都是不同的API來訪問MySQL後端

  • mysql是歷史API
  • mysqli是歷史API的新版本。它應該表現更好,並具有更好的功能。而且,API是面向對象的。
  • PDO_MySQL,是PDO的MySQL。 PDO已經在PHP中引入,並且該項目旨在爲所有數據庫訪問創建一個通用API,因此從理論上講,您應該能夠在RDMS之間遷移而不更改任何代碼(如果您在查詢中未使用特定的RDBM函數),也是面向對象的。

所以這取決於你想要產生什麼樣的代碼。如果你更喜歡面向對象的層或普通功能...

我的建議是

  1. PDO
  2. 的MySQLi
  3. MySQL的

而且我的感覺,MySQL的API會可能在將來的版本PHP中被刪除。

+1

很好的解釋:)謝謝 – 2012-11-16 06:47:44

+3

這不再是一種感覺:PHP7去掉了mysql API,留下PDO和mysqli – 2016-04-15 09:34:16

4

mysqli是mysql的增強版本。

PDO extension定義了一個用於訪問PHP中的數據庫的輕量級一致接口。每個實現PDO接口的數據庫驅動程序都可以將數據庫特定的功能作爲常規擴展功能公開。

+2

從手動文件複製不是很有用。 – XuDing 2015-10-12 13:44:40

84

有(超過)三個流行的方式來使用PHP從MySQL。

  1. DEPRECATED)的mysql functions是程序和使用手動轉義。
  2. MySQLi是mysql函數的替代品,具有面向對象和過程的版本。它支持準備好的語句。
  3. PDO(PHP數據對象)是一個通用數據庫抽象層,在許多其他數據庫中支持MySQL。它提供了準備好的語句,並在返回數據方面具有很大的靈活性。

我會推薦使用PDO和預處理語句。它是一個設計良好的API,如果有必要,可以讓您更輕鬆地轉移到另一個數據庫(包括支持ODBC的任何數據庫)。

+7

通常會有這樣的混淆:對於程序來說,你必須使用mysql _ *()函數來爲OO使用mysqli! 事實上,mysqli完全取代了mysql的早期(PHP 4)實現。使用mysqli可以使用程序風格和OO。 – 2010-06-19 09:31:48

+0

@帕特里克,謝謝。我已經糾正了這一點。 – 2010-06-19 15:23:16

7

有一個table比較3 API的功能。儘可能使用Mysqli,就像在PDO之後推出的最新版本一樣,並且未來會更好地維護。

+4

這完全錯了。對於PHP 5.0,「mysqli」和「PDO」[均已發佈](http://www.php.net/manual/en/mysqli.overview.php)。而且你沒有給出任何建議PDO不會被維護的依據。 – 2010-06-24 01:51:19

+2

我沒有建議。 PDO和mysqli有不同的功能,可能它們都會被修復。 PDO MAIN FEATURE是不同驅動程序的一致API,mysql只是其中之一。 – 2010-06-24 12:42:14

3

具體來說,MySQLi擴展提供了對舊版本的MySQL擴展以下非常有用的好處..

OOP接口(除程序) 預處理語句支持 交易+存儲過程支持 更好的語法 速度提升 增強的調試

PDO擴展

PHP數據對象擴展是一個數據庫抽象層。具體而言,這不是MySQL接口,因爲它提供了許多數據庫引擎(當然包括MYSQL)的驅動程序。

PDO旨在提供一致的API,這意味着當數據庫引擎發生更改時,代碼更改以反映這一點應該是最小的。使用PDO時,您的代碼通常會在許多數據庫引擎中「正常工作」,只需更改您使用的驅動程序即可。

除了兼容跨數據庫,PDO還支持準備語句,存儲過程等,同時使用MySQL驅動程序。

1

簡單地說我們可以說MySQL改進擴展,提供各種好處。mysqli擴展允許您訪問MySQL 4.1及更高版本提供的功能。

PHP數據對象(PDO)擴展定義了一個用於訪問PHP中數據庫的輕量級一致接口。每個實現PDO接口的數據庫驅動程序都可以將數據庫特定的功能作爲常規擴展功能公開。 請注意,您不能使用自己的PDO擴展來執行任何數據庫功能;您必須使用數據庫特定的PDO驅動程序來訪問數據庫服務器。