php針對各數據庫系統對應的擴展

什麼是API?php

一個應用程序接口(Application Programming Interface的縮寫),定義了類,方法,函數,變量等等一切 你的應用程序中爲了完成特定任務而須要調用的內容。在PHP應用程序須要和數據庫進行交互的時候所須要的API 一般是經過PHP擴展暴露出來(給終端PHP程序員調用)。mysql

API能夠是面向過程的,也能夠是面向對象的。對於面向過程的API,咱們經過調用函數來完成任務,而對於面向對象的API, 咱們實例化類,並在實例化後獲得的對象上調用方法。對於這兩種接口而言,後者一般是首選的,由於它更加現代化,而且 給咱們帶來了良好的代碼結構。程序員

當構建一個須要鏈接到MySQL服務端的PHP應用的時候,有好幾種API可供選擇。此文檔就是討論這些可用的API並討論如何爲 你的應用選擇一個最佳的解決方案。sql

 

什麼是鏈接器?數據庫

在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下。

什麼是PHP的mysqli擴展?

mysqli擴展,咱們有時稱之爲MySQL加強擴展,能夠用於使用 MySQL4.1.3或更新版本中新的高級特性。mysqli擴展在PHP 5及之後版本中包含。

mysqli擴展有一系列的優點,相對於mysql擴展的提高主要有:

  • 面向對象接口

  • prepared語句支持(譯註:關於prepare請參閱mysql相關文檔)

  • 多語句執行支持

  • 事務支持

  • 加強的調試能力

  • 嵌入式服務支持

Note:

若是你使用MySQL4.1.3或更新版本,強烈建議你使用這個擴展。

在提供了面向對象接口的同時也提供了一個面向過程的接口。

mysqli擴展是使用PHP擴展框架構建的,它的源代碼在PHP源碼目錄下的ext/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的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。

 

什麼是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有很大提高。很是但願你去嘗試這些提高。

 

相關文章
相關標籤/搜索