運行
在Unix環境下PHP5.1以上版本中:
如果你正在使用PHP5.1版本,PDO和PDOSQLITE已經包含在了此發行版中;當你運行configure時它将自動啟用。推薦你将PDO作為共享擴展構建,這樣可以使你獲得通過PECL升級的好處。推薦的構建支持PDO的PHP的configureline應該也要啟用zlib。你也應該啟用你選擇的數據庫的PDO驅動;關于這個的更多信息請查看database-specificPDOdrivers,但要注意如果你将PDO作為一個共享擴展構建,你必須也要将PDO驅動構建為共享擴展。
PHP5.1發布時将附帶一個全新的數據庫連接層,即PHPDataObjects(PDO)。雖然PHP一直都擁有很好的數據庫連接,但PDO讓PHP達到一個新的高度。學習如何獲得、安裝和使用PDO,以連接到IBM?DB2?UniversalDatabase?和IBMCloudscape?數據庫,插入和檢索數據,并探索更多高級特性,例如預處理語句(preparedstatements)、綁定參數(boundparameters)、可滾動遊标(scrollablecursors)、定位更新(positionedupdates)以及LOB。
背景
随着擁有更成熟OO語法的PHP5的發布,PHP越來越多地受到越來越大的機構的關注,對于PHP來說,提供更加一緻的和可訪問的數據訪問API變得越來越重要。
PHP與流行的開放源代碼關系數據庫管理系統(RDBMS)MySQL之間總是很有默契。這對拍檔的成功很大程度上是由于它們免費可用,而且進入的門檻也比較低,這兩種産品的合作使它們各自都取得了廣受推崇的地位。
很多PHP應用程序開發人員都習慣于PHP-MySQL這對組合,以緻PHP對其他數據庫的支持常常模仿MySQL客戶機庫API。然而,并不是所有的數據庫客戶機API都是一樣的,也不是所有的數據庫都提供相同的特性。雖然存在模仿,但不同的PHP數據庫擴展都有它們各自的怪僻和不同之處,所以從一種數據庫遷移到另一種數據庫時會有一些困難。雖然這不是創建PDO的直接原因,但是在設計過程中還是有一定影響的。
如果您是帶着想結合使用PHP和DB2的目的閱讀本文,那麼您很可能屬于以下類型中的一種:
您從一家小公司開始,在MySQL(舉個例子)上運行PHP,由于業務增長,您需要DB2所提供的可伸縮性/可靠性/支持或其他特性。您希望移植代碼,以使用DB2,但由于API的變化,您需要編寫或實現一個抽象層,以便在DB2上測試應用程序的同時可以繼續在舊的數據庫上運行。不僅如此,您還希望能有自己的選擇,并保留支持其他RDBMS的可能性,因為您清楚,有些客戶機可能已經和其他平台栓在一起了。
您用PHP在MySQL之上構建了一個小型的部門應用程序(同樣,這隻是舉個例子,我并不是要跟MySQL過不去)。事實證明這個應用程序本身很有用,現在已經在這個部門之外使用,并且闖入了CIO/CTO的法眼——現在需要遵從托管的标準數據庫。(是的,這是第一點的一個變種。)在其他某些複雜的企業級應用程序的後台,您已經有一個DB2實例;您希望利用PHP的快速應用程序開發和原型設計來生成動态報告。
目标
至此我們已經掌握了數據庫及PHP的背景知識,現在正好可以提及PDO背後的一些設計目标:
為大多數數據庫API中的常見特性提供一緻的API。
具有可擴展性,以使數據庫供應商X仍然可以暴露特性Y并保持PDO的兼容性。
提供大量基本的兼容性技巧,以便能夠更方便地創建跨數據庫兼容的應用程序。
不為給定數據庫API中本來沒有的特性(例如序列)提供完全抽象或仿真。PDO類意圖為您提供對數據庫本地特性的一緻性訪問,并減少幹擾。
通過将與PHP内部打交道的代碼(這是最難于編寫的部分)集中起來,簡化PHP數據庫驅動程序的創建。
最後一點非常重要。PDO是模塊化結構,它被分成一個公共核心以及一個或多個驅動程序擴展,公共核心提供了在腳本(PDO本身)中使用的API,驅動程序擴展則為PDO和本地RDBMS客戶機API庫架起一座橋梁。DB2用戶将會希望使用PDO_ODBC驅動程序,據稱它可以提供以下特性:
它經過重新編寫,能支持遵從ODBCV3的驅動程序和驅動程序管理器。它還考慮了對DB2特定特性和優化的支持,這成為設計過程中的一部分——不是後來補充的。
它支持經過試驗和測試的存儲過程和大型對象。它不僅能夠工作,而且非常好用。
對于取10,000行記錄這樣的DB2訪問操作,使用PDO_ODBC驅動程序時的性能比使用傳統的PHPUnifiedODBC擴展要快大約10倍。之所以有這麼大的差異,是因為在PDO中默認的遊标是輕量級的隻能向前移動的遊标。
獲取
PHP5.1發布時将附帶PDO,但是也可以通過PECL這個PHP擴展庫(PHPExtensionRepository)來結合使用PDO和PHP5.0.3及以上版本。如果您使用的是Windows,那麼您會欣喜地發現安裝過程要簡單得多。
我将假設您已經擁有配置PHP5使之使用您選擇的Web服務器的經驗,隻有在此假設下,我才能集中精力關注更相關的細節。同樣,我還将假設您使用的是一個DB2UniversalDatabase服務器或網絡服務器模式下的IBMCloudscape數據庫,并且接受了用戶為db2inst1、密碼為ibmdb2的默認安裝選項。如果您自己編譯驅動程序,那麼在進行編譯的機器上,應該安裝有DB2客戶機,并且存在應用程序開發header,否則編譯将遭到失敗。



















