ADODB 核心優勢
- 統一 API:同一套代碼操作 MySQL、PostgreSQL、Oracle、SQLite、Access、DB2、MSSQL、ODBC 等
- 智能功能:自動插入/更新、分頁、HTML 表格輸出、對象訪問、緩存
- 性能優化:預處理、連接池、緩存驅動
- 成熟穩定:20 年歷史、廣泛用於 Legacy 專案
安裝與連接
require_once 'adodb/adodb.inc.php'; // 或 composer require adodb/adodb
// MySQL (推薦 mysqli 驅動)
$db = NewADOConnection('mysqli');
$db->Connect('localhost', 'user', 'pass', 'dbname');
$db->Execute("SET NAMES utf8mb4");
// PostgreSQL
$db = NewADOConnection('postgres');
$db->Connect('localhost', 'user', 'pass', 'dbname');
// SQLite
$db = NewADOConnection('sqlite3');
$db->Connect('/path/to/db.sqlite');
// DSN 字符串連接 (通用)
$db = NewADOConnection("mysqli://user:pass@localhost/dbname?charset=utf8mb4");
核心操作 API
1. 查詢:Execute + Fetch 模式
$rs = $db->Execute("SELECT * FROM users WHERE status=1 LIMIT 10");
if ($rs) {
while (!$rs->EOF) {
echo $rs->fields['username'] . "\n";
$rs->MoveNext();
}
$rs->Close();
}
// 獲取所有行為關聯數組
$arr = $db->GetAll("SELECT * FROM users WHERE status=1");
// 獲取單行
$row = $db->GetRow("SELECT * FROM users WHERE id=1");
// 獲取單值
$count = $db->GetOne("SELECT COUNT(*) FROM users");
2. 智能插入/更新:AutoExecute
$data = [
'username' => 'john',
'email' => 'john@example.com',
'created' => date('Y-m-d H:i:s'),
];
// 插入:自動過濾不存在的字段,處理類型轉換
$db->AutoExecute('users', $data, 'INSERT');
// 更新:需指定 WHERE 條件
$db->AutoExecute('users', ['email' => 'new@example.com'], 'UPDATE', "id=1");
3. 參數綁定防注入
$db->Execute("INSERT INTO logs (level, message) VALUES (?, ?)", ['ERROR', 'Disk full']);
$db->Execute("SELECT * FROM users WHERE id=? AND status=?", [123, 1]);
4. 事務控制
$db->StartTrans();
try {
$db->Execute("INSERT ...");
$db->Execute("UPDATE ...");
$db->CompleteTrans(); // 自動提交/回滾
} catch (Exception $e) {
$db->FailTrans();
throw $e;
}
進階功能
1. 對象訪問模式
$rs = $db->Execute("SELECT id, name FROM products");
while ($obj = $rs->FetchNextObject()) {
echo $obj->ID . ': ' . $obj->NAME . "\n";
}
2. HTML 表格直接輸出
require_once 'adodb/tohtml.inc.php';
$rs = $db->Execute("SELECT * FROM products LIMIT 20");
echo rs2html($rs, 'border=1 class="table"'); // 直接輸出 ...
3. 內建分頁器
require_once 'adodb/adodb-pager.inc.php';
session_start(); // 分頁器需 Session
$pager = new ADODB_Pager($db, "SELECT * FROM articles ORDER BY id DESC");
$pager->Render($rowsPerPage = 10); // 直接輸出分頁導航+表格
4. 緩存查詢結果
// 緩存 1 小時
$rs = $db->CacheExecute(3600, "SELECT * FROM heavy_query_view");
// 或手動控制
$cacheKey = 'user_list';
if (!$rs = $db->CacheGet($cacheKey)) {
$rs = $db->Execute("SELECT * FROM users");
$db->CachePut($cacheKey, $rs, 3600);
}
5. 獲取數據庫元信息
// 表結構
$cols = $db->MetaColumns('users');
foreach ($cols as $col) {
echo $col->name . ' ' . $col->type . '(' . $col->max_length . ')' . "\n";
}
// 索引
$indexes = $db->MetaIndexes('users');
// 主鍵
$pk = $db->MetaPrimaryKeys('users');
驅動選擇指南
| 數據庫 | 推薦驅動 | 備註 |
| MySQL/MariaDB | mysqli | 原生、支持預處理、事務、SSL |
| PostgreSQL | postgres9 / postgres7 | 版本對應 |
| SQLite | sqlite3 / pdo_sqlite | 文件嵌入式 |
| Oracle | oci8 | 需 Oracle Instant Client |
| SQL Server | mssqlnative / pdo_sqlsrv | Windows 首選 |
| Access | access | 僅 Windows/ODBC |
| DB2 | db2 | 需 DB2 Client |
| 通用 ODBC | odbc / odbc_mssql | 最後手段 |
遷移建議:ADODB → 現代替代品
| 方案 | 特點 | 遷移難度 |
| PDO | PHP 內建、無依賴、預處理、事務、多驅動 | 低(API 相似) |
| Doctrine DBAL | 強大 SQL 構建器、Schema 管理、類型系統、緩存 | 中 |
| Eloquent (Laravel) | ActiveRecord、關係、遷移、觀察者、集合 | 中高(架構差異) |
| Cycle ORM | DataMapper、嚴格類型、無註解、高性能 | 高 |
策略:新專案直接用 PDO/Doctrine DBAL/Eloquent;維護老專案時,ADODB 仍可穩定工作,但注意 PHP 8.x 兼容性(部分驅動需更新)。
- 上一篇文章: Dispatch PHP 微框架輕量級路由指南:API、原型、簡單站點的極速構建利器
- 下一篇文章: 關於 PHP 的 10 大認知誤區深度辯析:從面向對象到性能、安全、生態的真相
Copyright ©
程式碼之家 All Rights Reserved