OSWikiHK: 請協力 GPLv3 的中文翻譯工作。
PEAR::DB
OSWikiHK,自由中文開源知識庫
PEAR 中最常用的套件 (package) 恐怕是 PEAR::DB 。
PEAR::DB 作用和 Perl 的 DBI 及 Java 的 JDBC 差不多,
讓您可以用相同的介面去取存不同的資料庫管理系統 (DBMS) 。
PHP 本身雖有提供存取各 DBMS 的函數,
但這些函數只是由有關的 C API 直接轉過來,如 mysql_query 及
pg_exec 等。同樣的功,不同的 DBMS 有不同的函數,有不同的使用方法。
如果不幸您需要轉換程式使用另一個 DBMS ,那就是一件非常頭痛的事。
學習使用另一個 DBMS 要花時間,最恐怖還是將整個程式來個大翻新。
為了令程式可以使用不同的資料庫,
很多開發者都會編寫一些函數庫或類別庫來處理對資料庫的存取。
<?php
require_once("DB.php");
$dbh = DB::connect('mysql://root:@localhost/test_db');
$result = $dbh->query('SELECT id, name FROM test_table ORDER BY id');
if ( $result->numRows($result) > 0 ) {
echo "<table>\n<tr><th>ID</th><th>Name</th></tr>\n";
while ( $data = $result->fetchRow() ) {
echo "<tr><td>$data[0]</td><td>$data[1]</td></tr>\n";
}
echo "</table>\n";
} else {
echo "Ok;\n";
}
?>
上面的程式很簡單示範如何使用 PEAR::DB。 很多朋友都會留意到基本步驟和平常的資料庫程式沒有多大分別。首先用 DB::connect 連接資料庫, $db->query 對資料庫發出查詢要求,$db->numRows 取得查詢結果有幾多筆記錄,
$result->fetchRow() 則幫我們一筆一筆地遂次傳回查詢結果中的記錄。
無論那個 DBMS ,方法都一樣。如果要轉 DBMS ,改改 DB::connect
的參數就可以了。
PEAR::DB 的架構是每一個 DBMS 都有自己的一個資料庫驅動類別 (如 DB_mysql 及 DB_pgsql 等) ,包含了存取 DBMS 實質需要的程式碼 ,它們全部都衍生自類別 DB_common 。 主類別 DB 則包含了整個套件一些公用函數, DB_Error 儲存有關錯誤資料, DB_result 處理 SELECT 查詢的結果。
- 連接資料庫
- 執行 SQL 命令
- 處理查詢結果
- Sequence
- 其他方法
- $dbh->affectedRows()
傳回對上個 INSERT/UPDATE/DELETE 查詢影響了多少個記錄。 - $result->numRows()
傳回查詢結果中有幾多筆記錄 - $result->numCols()
傳回查詢結果中每筆記錄有幾多欄 - $result->tableInfo()
傳回杳詢結果中各欄的資料 - $result->free()
釋放查詢結果所佔有的系統資源 - $dbh->autoCommit(true/false)
設定是否使用 transaction - $dbh->commit()
完成當前的 transaction - $dbh->rollback()
取消當前的 transaction
- $dbh->affectedRows()
- 錯誤處理
其他參考資料
- PEAR Offical Site
http://pear.php.net/ - PHP Manual V. PEAR
http://www.php.net/manual/en/pear.php - Quick Start Guide to Pear DB
http://vulcanonet.com/soft/?pack=pear_tut - Best Practices: Database Abstraction - !PhpBuilder
http://www.phpbuilder.com/columns/allan20010115.php3 - PEAR Documentation and Tutorials - PHP Everywhere
http://php.weblogs.com/php_pear_tutorials
作者: 來醫


