一名新 PHP 資料對象 (PDO) 資料抽象層的原始開發人員為您簡要介紹該抽象層,重點講述與 Oracle 一起啟動並執行情況。
需要 PHP:5.0
需要其他:Oracle 8 或更高版本用戶端庫
下載用於 Oracle 的 PDO (Windows):php_pdo.dll, php_pdo_oci.dll
下載用於 Oracle 的 PDO (Unix):pdo, pdo_oci
PDO 簡介
PHP 主要是由志願者完成的項目;儘管有少數一些固定的“核心”開發人員,但是我們沒有一個人在全職受薪的開發 PHP。除此之外,我們分別位於世界不同地方,您可以想象長期開發的協調工作是何等困難。因此,PHP 主要是基於突發奇想的個人短期需求來發展的,其原因也多種多樣,有的是實驗,有的則是因為“明天有活要交”。儘管這樣通常每一步都會改善 PHP,但從長遠來看則是缺乏完整性 - 資料庫擴充就是一個重要的例子。
在各種不同的資料擴充(oci、mysql、postgresql、mssql 等)之間根本沒有真正的一致性,甚至在某些情況下,在這些擴充內部也沒有真正的一致性。幾乎所有這些擴充都在使用與基礎資料庫 API 緊密相連的不同程式碼完成著相同種類的任務。而且因為我們(PHP 核心開發人員和擴充開發人員)的人手非常有限,因此這就造成了代碼更加難以維護,從而為 PHP 帶來了很大的問題。
由於 PHP 越來越受歡迎並不斷成功,因此主要 PHP 資料庫擴充的維護者們參加了在德國舉行的 LinuxTag 2003 大會,在會上我們交換了對 PHP 前景的看法。在討論 PHP 發展的隨機性時,我們確定了在 PHP 中進行資料庫訪問的一些目標:
·提供一種輕型、清晰、方便的 API
·統一各種不同 RDBMS 庫的共有特性,但不排除更進階的特性。
·通過 PHP 指令碼提供可選的較大程度的抽象/相容性。
我們之所以提出了這種 PHP 資料對象 (PDO) 的概念,是因為我們希望通過採用 Zend Engine 2(PHP 5 的核心)先進的物件導向特性獲得該 API 的一些更優秀的效能。
PHP 中的資料抽象層概念一點都算不上新;在 Google 中查詢“PHP database abstraction”會找到大約 83,200 個匹配項。它幾乎是許多 PHP 開發人員夢寐以求的,而其產生則部分歸因於我們不完整的 API。如果您曾經嘗試過使用第三方抽象層來完成任何真正重要的工作,通常會發現這些抽象層對於手頭的工作來說設計的功能過於強大了 - 或者表現為在使用前需要進行大量學習,或者表現為介面速度緩慢,參數需要經過多層指令碼函數調用才能到達資料庫自有的 API;通常是存在上述兩種表象。
為什麼這些抽象層會存在這種問題?這些抽象層總是在試圖完成太多的任務,甚至可能是不可能的任務。我們決定以實用為目標,僅將一些最常見的資料庫 API 特性作為我們的基礎,並使得 PDO 驅動程式能夠將它們特定於產品的特性暴露為常規擴充函數。
為什麼使用 PDO?
聽過有關資料庫抽象擴充謠傳的大多數人會立刻對 PDO 的擴充方面產生疑惑 - 我們是否要分析 SQL,將其轉換為相應的後端方言呢?我們如何處理特性 X 或特性 Y,等等。因此,當您聽說我們在 PDO 中根本不用為此而擔憂時可能會大吃一驚;我們不希望使所有內容都完全統一,因為要使得這種統一成為可能,只能是將自己限制在最低的通用標準。
如果 PDO 不是一個整體的抽象層,那還有什麼別的原因值得您考慮使用它嗎?
·效能。PDO 從一開始就吸取了現有資料庫擴充成功和失敗的經驗教訓。因為 PDO 的代碼是全新的,所以我們有機會重新開始設計效能,以利用 PHP 5 的最新特性。
·能力。PDO 旨在將常見的資料庫功能作為基礎提供,同時提供對於 RDBMS 獨特功能的方便訪問。
·簡單。PDO 旨在使您能夠便於使用資料庫。API 不會強行介入您的代碼,同時會清楚地表明每個函數調用的過程。
·運行時可擴充。PDO 擴充是模組化的,使您能夠在運行時為您的資料庫後端載入驅動程式,而不必重新編譯或重新安裝整個 PHP 程式。例如,PDO_OCI 擴充會替代 PDO 擴充實現 Oracle 資料庫 API。還有一些用於 MySQL、PostgreSQL、ODBC 和 Firebird 的驅動程式,更多的驅動程式尚在開發。
您可能想瞭解 PDO 與其他常用的抽象層的對比情況,例如 PEAR DB 或 ADODB。無論在 API 方面還是在效能方面,PDO 都比其他常見抽象層要輕型,但是涉及到在各個資料庫後端之間提供統一性方面,則不如那些抽象層,例如用於處理大量可移植性問題的 PEAR MDB 2 抽象層。
在哪裡可以獲得 PDO?轉自:阿佛爾[www.afoer.com]
http://www.afoer.com/html/2007-05/1178362998.html
PDO 是通過 PECL(發音為“pee-kle”,歐洲語言風格),即 PHP 擴充庫提供的。如果您在運行 Linux 電腦,請按照下面的說明進行設定;稍後是在 Windows 上安裝的詳細資料。
請注意,PDO 及其驅動程式當前處於“alpha”狀態;這就意味著我們會合理保證沒有重大缺陷,但是該程式包功能並不完善 - 我們還要添加很多功能。雖然我們鼓勵您測試該程式包,但是實在不推薦在現階段將其用於生產。
Unix/Linux 安裝
如果您以前尚未嘗試過 PHP 5,則請花一點時間來通讀一下“新聞”和各種聲明。在 UNIX 電腦上,您可能要安裝或升級 libxml2;如果沒有 libxml2,“pear”程式包管理工具就無法運行,您安裝 PDO 時就會遇到很多困難。擷取 PHP 5,並將其編譯和安裝。確保指定的首碼不是 /usr/local/,這樣它就不會與 PHP 4 安裝發生衝突了:
% ./configure --prefix=/usr/local/php5 --with-zlib [此處指定其他選項]
% make install
現在您就可以使用“pear”工具擷取並安裝 PDO 以及用於 PDO 的 Oracle 驅動程式了。因為 PDO 當前標記為 alpha,所以預設情況下 pear 工具不會下載該程式包。在該程式包名稱後面添加尾碼“-alpha”,通知該 pear 工具可以安裝 alpha 版本: % PATH="/usr/local/php5/bin:$PATH"
% pear install PDO-alpha
您需要告知 PHP 從專用於 PHP 5 的 php.ini 檔案載入 PDO 驅動程式。如果您使用的首碼與我使用的一樣,PHP 則會在 /usr/local/php5/lib/php.ini 中尋找 php.ini 檔案。向該檔案中添加以下行:
extension=pdo.so
現在您需要擷取資料庫特定的驅動程式;對於 Oracle,此特定程式稱為 PDO_OCI。在 shell 中,鍵入:
% pear install PDO_OCI-alpha
此驅動程式也需要從 php.ini 檔案載入;將下行添加到前面添加的那行之後:
extension=pdo_oci.so
現在檢查一下,確保它能夠運行:
% php -m
在模組列表中,您應該會看到 PDO 和 PDO_OCI。
防火牆礙事了?
如果您位於防火牆的後面,則在使用 pear 安裝程式擷取程式包時可能會遇到一些問題。如果發生這種情況,則可以按照下列說明手動下載並安裝這些程式包:
% wget http://pecl.php.net/get/PDO