背景
ADODB_Lite 宣稱是 ADODB 的「精簡版」,保留核心功能、體積更小。實測發現:關鍵高階功能全數缺失,僅適合極簡單的 CRUD 場景。
功能缺失對照表
| 功能 | ADODB | ADODB_Lite | 影響 |
FetchNextObject() | ✅ | ❌ | 物件式取值習慣中斷 |
DBDate() / DBTimeStamp() | ✅ | ❌ | 跨資料庫日期格式化失效 ⚠️ 嚴重 |
CacheSelectLimit() | ✅ | ❌ | 查詢快取 + 分頁 一體化缺失 |
RecordCount() / RowCount() | 雙支援 | 僅 RecordCount() | 相容性風險 |
| 查詢快取機制 | ✅ 完整 | ❌ 無 | 效能優化手段消失 |
| 事務處理 | ✅ StartTrans()/CompleteTrans() | ❌ 無 | 資料一致性無保障 ⚠️ 嚴重 |
SetFetchMode() | ✅ | ❌ (v1.12 仍無) | 強迫數字索引,不可用關聯陣列 |
ADODB_Lite 1.12 新版實測補充
- 依然缺少
SetFetchMode()
- 預設僅支援數字索引
$rs->fields[0],無法 $rs->fields['col']
- 官方文檔建議:啟用 PEAR 模組或設定全域
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC —— 但實測無效
架構差異
ADODB (完整版)
├── adodb.inc.php # 核心
├── drivers/ # 20+ 資料庫驅動
├── adodb-pager.inc.php # 分頁
├── adodb-cache.inc.php # 快取
├── adodb-xml.inc.php # XML 匯出
├── rsfilter.inc.php # RecordSet 過濾器
└── tohtml.inc.php # HTML 表格輸出
ADODB_Lite
├── adodb_lite.inc.php # 核心 (單檔)
└── drivers/ # 同樣放了 20+ 驅動檔,但核心不呼叫 ❌
諷刺的是:驅動檔全放著,核心卻用不到,佔空間不說,還誤導使用者以為支援完整。
適用場景建議
| 專案類型 | 推薦 | 理由 |
| 企業級應用、需事務/快取/跨庫遷移 | ADODB 完整版 | 功能完整、社群活躍、文檔豐富 |
| 極簡單讀寫、嵌入式、記憶體受限 | PDO / SQLite3 原生 | 無額外依賴、效能更好 |
| 舊專案維護、已大量使用 ADODB_Lite | 逐步遷移至 ADODB 或 PDO | 避免技術債累積 |
總結
ADODB_Lite 「輕」在核心功能被閹割,卻保留龐大驅動目錄,屬於「偽輕量」。對於現代 PHP 專案,直接使用 PDO + 具體驅動 才是正統的輕量化選擇;若需資料庫抽象層,ADODB 完整版 或 Doctrine DBAL 才是可靠夥伴。
- 上一篇文章: Smarty + ADODB + 自訂類別:PHP MVC 風格開發模式實戰分享
- 下一篇文章: PHP 取得用戶真實 IP 與代理伺服器 IP 完整指南
Copyright ©
程式碼之家 All Rights Reserved