Overview
這一部分對在PHP應用開發過程中需要和Mysql資料庫互動時可用的選擇進行一個簡單介紹。
什麼是API?
一個應用程式介面(Application Programming Interface的縮寫),定義了類,方法,函數,變數等等一切 你的應用程式中為了完成特定任務而需要調用的內容。在PHP應用程式需要和資料庫進行互動的時候所需要的API 通常是通過PHP擴充暴露出來(給終端PHP程式員調用)。
API可以是面向過程的,也可以是物件導向的。對於面向過程的API,我們通過調用函數來完成任務,而對於物件導向的API, 我們執行個體化類,並在執行個體化後得到的對象上調用方法。對於這兩種介面而言,後者通常是首選的,因為它更加現代化,並且 給我們帶來了良好的代碼結構。
當構建一個需要串連到MySQL服務端的PHP應用的時候,有好幾種API可供選擇。此文檔就是討論這些可用的API並討論如何為 你的應用選擇一個最佳的解決方案。
什麼是連接器?
在MySQL文檔中,術語connector解釋為“一段允許你的應用串連到MySQL資料庫伺服器的軟體代碼”。 MySQL提供了很多語言的連接器,其中包括PHP的。
在你的PHP應用需要和一個資料庫伺服器互動的時候,你需要書寫PHP代碼去完成“串連資料庫伺服器”,“查詢資料庫“以及其他資料庫相關功能 等一系列活動。你的PHP應用將會使用提供這些API的軟體,或者在需要的時候使用一些中間庫,來處理你的應用和資料庫伺服器之間的互動。 這種軟體通常被認為是連接器,它允許你的引用串連到資料庫伺服器。
什麼是驅動?
驅動是一段設計用來於一種特定類型的資料庫伺服器進行互動的軟體代碼。驅動可能會調用一些庫,比如MySQL用戶端庫或者MySQL Native驅動庫。 這些庫實現了用於和MySQL資料庫伺服器進行互動的底層協議。
通過一個例子PDO(PHP Database Object的縮寫)資料庫抽象層可以 使用多種特定資料庫的驅動。其中一種驅動就是PDO MYSQL驅動,它就是與MySQL伺服器之間的介面。
有時大家會不加區分的使用連接器和驅動這兩個術語。在MySQL相關文檔中"driver"術語被作為一個連接器包 中提供特定資料庫部分的軟體代碼。
什麼是擴充?
在PHP文檔中你還會發現很多其他的擴充。PHP代碼是由一個核心,一些可選向外延展群組成了核心功能。PHP 的MySQL相關擴充,比如mysqli,mysql都是基於PHP擴充架構實現的。
擴充一個典型的作用就是暴露一個API給PHP程式員,允許擴充自己的功能可以被程式員使用。當然,也有一部分基於PHP擴充架構 開發的擴充不會給PHP程式員暴露API介面。
比如說PDO MySQL驅動擴充,就沒有向PHP程式員暴露API介面,但是向它上層的PDO層提供了一個介面。
術語API和擴充描述的不是同一類事物,因為擴充可能並不需要暴露一個API介面給程式員。
PHP中提供的用於MySQL的主要API是什嗎?
當考慮串連到MySQL資料庫伺服器的時候,有三種主要的API可供選擇:
PHP的MySQL擴充
PHP的mysqli擴充
PHP資料對象(PDO)
三者都有各自的優缺點。下面的討論就是為了對每種API的關鍵方面給出一個簡短的介紹。
什麼是PHP的MySQL擴充?
這是設計開發允許PHP應用與MySQL資料庫互動的早期擴充。mysql擴充提供了一個面向過程 的介面,並且是針對MySQL4.1.3或更早版本設計的。因此,這個擴充雖然可以與MySQL4.1.3或更新的資料庫服務端 進行互動,但並不支援後期MySQL服務端提供的一些特性。
Note:
如果你是使用MySQL4.1.3或更新的服務端版本,強烈建議你使用mysqli 擴充替代它。
mysql擴充的原始碼在PHP擴充目錄ext/mysql下。
對於mysql擴充的更多資訊,請參閱MySQL。
什麼是PHP的mysqli擴充?
mysqli擴充,我們有時稱之為MySQL增強擴充,可以用於使用 MySQL4.1.3或更新版本中新的進階特性。mysqli擴充在PHP 5及以後版本中包含。
mysqli擴充有一系列的優勢,相對於mysql擴充的提升主要有:
Note:
如果你使用MySQL4.1.3或更新版本,強烈建議你使用這個擴充。
在提供了物件導向介面的同時也提供了一個面向過程的介面。
mysqli擴充是使用PHP擴充架構構建的,它的原始碼在PHP源碼目錄下的ext/mysqli中。
對於mysqli擴充的更多資訊,請參閱Mysqli。
什麼是PDO?
PHP資料對象,是PHP應用中的一個資料庫抽象層規範。PDO提供了一個統一的API介面可以使得你的PHP應用不去關心具體要 串連的資料庫伺服器系統類別型。也就是說,如果你使用PDO的API,可以在任何需要的時候無縫切換資料庫伺服器,比如從Firebird 到MySQL,僅僅需要修改很少的PHP代碼。
其他資料庫抽象層的例子包括Java應用中的JDBC以及Perl中的DBI。
當然,PDO也有它自己的先進性,比如一個乾淨的,簡單的,可移植的API,它最主要的缺點是會限制讓你不能使用 後期MySQL服務端提供所有的資料庫進階特性。比如,PDO不允許使用MySQL支援的多語句執行。
PDO是基於PHP擴充架構實現的,它的源碼在PHP源碼目錄的ext/pdo下。
PDO的更多資訊,請參閱PDO。
什麼是PDO的MySQL磁碟機?
PDO的MySQL驅動並不是一套API,至少從PHP程式員的角度來看是這樣的。實際上,PDO的MySQL驅動處於PDO自己的下層, 提供了特定的Mysql功能。程式員直接調用PDO的API,而PDO使用了PDO的MySQL驅動完成與MySQL伺服器端的互動。
PDO的MySQL驅動是眾多PDO驅動中的一個。其他可用的PDO驅動包括Firebird,PostgreSQL等等。
PDO的MySQL驅動是基於PHP擴充架構實現的。它的源碼在PHP源碼目錄下的ext/pdo_mysql。 它沒有向PHP程式員暴露API。
PDO的MySQL擴充的更多資訊請參閱MySQL (PDO)。
什麼是PHP的MySQL Native 驅動?
為了與MySQL資料庫服務端進行互動,mysql擴充,mysqli擴充, PDO MySQL驅動都使用了實現了必要的協議的底層庫。以前,可用的庫只有MySQL用戶端庫和libmysql。
然而,libmysql包含的介面沒有針對與PHP的應用互動進行最佳化,libmysql 是早期為C應用程式設計的。基於這個原因,MySQL Native驅動mysqlnd,作為libmysql的一個 針對PHP應用的修改版本被開發。
mysql,mysqli以及PDO Mysql驅動都可以各自配置使用 libmysql或者mysqlnd。mysqlnd作為一個專門設計 用於PHP系統的庫,它在記憶體和速度上都比libmysql有很大提升。非常希望你去嘗試這些提升。
Note:
MySQL Native驅動僅僅可以在MySQL服務端版本為4.1.3及以後版本才可以使用。
MySQL Native驅動是基於PHP擴充架構實現的。原始碼位於PHP源碼目錄的ext/mysqlnd下。 它沒有向PHP程式員暴露介面。
特性比較
下表比較了PHP中三種主要的MySQL串連方式的功能:
| |
PHP的mysqli擴充 |
PDO (使用PDO MySQL驅動和MySQL Native驅動) |
PHP的mysql擴充 |
| 引入的PHP版本 |
5.0 |
5.0 |
3.0之前 |
| PHP5.x是否包含 |
是 |
是 |
是 |
| MySQL開發狀態 |
活躍 |
在PHP5.3中活躍 |
僅維護 |
| 在MySQL新項目中的建議使用程度 |
建議 - 首選 |
建議 |
不建議 |
| API的字元集支援 |
是 |
是 |
否 |
| 服務端prepare語句的支援情況 |
是 |
是 |
否 |
| 用戶端prepare語句的支援情況 |
否 |
是 |
否 |
| 預存程序支援情況 |
是 |
是 |
否 |
| 多語句執行支援情況 |
是 |
大多數 |
否 |
| 是否支援所有MySQL4.1以上功能 |
http://www.bkjia.com/PHPjc/478600.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/478600.htmlTechArticleOverview 這一部分對在PHP應用開發過程中需要和Mysql資料庫互動時可用的選擇進行一個簡單介紹。 什麼是API? 一個應用程式介面(Application P...