資料庫抽象層讓應用程式脫離特定 RDBMS,PEAR MDB 融合 PEAR DB 易用性與 Metabase 深度抽象,提供 **資料型別抽象、XML Schema 管理、預備查詢模擬、事務支援** 等企業級特性,且效能優於前身。本文深度解析 MDB 核心優勢與實戰用法。
| 特性 | 說明 |
|---|---|
| OO 風格 API | 物件導向介面,符合現代 PHP 開發習慣 |
| 預備查詢模擬 | 不支援原生預備陳述式的資料庫 (如舊版 MySQL) 自動模擬 |
| 資料型別抽象 | 定義 INTEGER, VARCHAR, DATE, BLOB 等邏輯型別,自動映射各 DB 原生型別 |
| LOB 支援 | 大物件 (BLOB/CLOB) 統一串流讀寫 API |
| 事務控制 | beginTransaction(), commit(), rollback() 統一介面 |
| DDL 抽象 | 建表/刪表/索引/序列跨平台一致 |
| XML Schema 管理 | 版本控管、差異比對、自動升級腳本生成 |
'mysql',
'username' => 'app_user',
'password' => 'secret',
'hostspec' => 'localhost',
'database' => 'myapp'
);
// 2. 建立連線
$mdb = MDB::connect($dsn);
if (MDB::isError($mdb)) die($mdb->getMessage());
// 3. 執行查詢 (自動處理型別轉換)
$res = $mdb->query('SELECT id, name, created_at FROM users WHERE status = ?', array('active'));
if (MDB::isError($res)) die($res->getMessage());
// 4. 取得結果 (關聯陣列)
while ($row = $res->fetchRow(MDB_FETCHMODE_ASSOC)) {
echo "User: {$row['name']} (ID: {$row['id']})\n";
}
// 5. 預備查詢 (防注入、效能佳)
$stmt = $mdb->prepare('INSERT INTO logs (msg, created) VALUES (?, NOW())');
$mdb->execute($stmt, array('User login'));
$mdb->commit();
?>
email
部署:$mdb->createDatabaseSchemaFromXML('schema.xml'); — 自動生成各目標資料庫專屬 DDL。
| 場景 | 推薦方案 |
|---|---|
| 單一資料庫、追求極致效能 | 原生 PDO / mysqli / SQLSRV |
| 多資料庫支援、專案長期維護 | PEAR MDB 或 Doctrine DBAL |
| 需 XML Schema 版控、自動遷移 | PEAR MDB (獨特優勢) |
| 現代 PHP 專案 (Composer/PSR) | Doctrine DBAL / Laravel Eloquent (生態更豐富) |
PEAR MDB 雖屬上一代產品,其 **XML Schema 驅動開發** 理念仍具前瞻性。維護舊專案或需嚴格跨平台 Schema 管理時,MDB 依然是可靠選擇。