Active Data Objects DataBase:PHP 資料庫抽象層,統一 API 屏蔽底層差異(MySQL/PostgreSQL/Oracle/SQL Server/Access/ODBC 等),遷移數據庫只需改驅動名稱。
# 下載解壓至項目目錄
include_once('adodb/adodb.inc.php'); // 核心文件,必須引入
按需引入擴展:
adodb-pager.inc.php:分頁顯示adodb-session.php:Session 存數據庫adodb-errorhandler.inc.php:自定義錯誤處理tohtml.inc.php:記錄集直接輸出 HTML 表格toexport.inc.php:導出 CSV/Tab 文本$conn = &ADONewConnection('mysql'); // 驅動名稱:mysql/postgres/oci8/mssql/ado/odbc...
$conn->debug = true; // 開啟調試,輸出執行的 SQL
$conn->Connect('localhost', 'user', 'pass', 'dbname');
// 或持久連接:$conn->PConnect(...)
$sql = "INSERT INTO t (name, age) VALUES ('abc', 18)";
$rs = $conn->Execute($sql);
if (!$rs) die($conn->ErrorMsg()); // 失敗輸出錯誤信息
// 1. 取一條空記錄作為模板
$rs = $conn->Execute("SELECT * FROM t WHERE 1=0");
// 2. 準備數據數組
$data = array('name' => 'john', 'age' => 28);
// 3. 自動生成 INSERT 語句
$insertSQL = $conn->GetInsertSQL($rs, $data);
// INSERT INTO t (name, age) VALUES ('john', 28)
$conn->Execute($insertSQL);
GetUpdateSQL 同理,需先查出目標記錄。$rs = $conn->Execute('SELECT * FROM t');
if ($rs) {
while (!$rs->EOF) {
// 數字索引
for ($i=0; $i<$rs->FieldCount(); $i++) echo $rs->fields[$i] . ' ';
// 或關聯索引(需先設定全域模式)
// $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
// echo $rs->fields['name'];
$rs->MoveNext();
}
$rs->Close();
}
$conn->Close();
$rs = $conn->Execute('SELECT * FROM t');
while ($arr = $rs->FetchRow()) { // 內部自動 MoveNext
echo $arr['name'] . ' ' . $arr['age'] . "<br>";
}
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; // 全域設置,影響後續 Execute
$rs = $conn->Execute('SELECT * FROM t');
while (!$rs->EOF) {
echo $rs->fields['name'] . ' ' . $rs->fields['age'];
$rs->MoveNext();
}
include('adodb/adodb-pager.inc.php');
$sql = "SELECT * FROM t ORDER BY id";
$pager = new ADODB_Pager($conn, $sql);
$pager->Render($rows_per_page=10); // 直接輸出帶導航的 HTML 表格
include('adodb/adodb-errorhandler.inc.php');
$conn->SetErrorHandler('myErrorHandler');
function myErrorHandler($msg, $sql) {
error_log("SQL Error: $msg\nSQL: $sql");
// 可發郵件、顯示友好頁面
}
ADODB 早期項目常見,新項目建議使用 PDO(原生、標準、性能更好)或成熟 ORM(Doctrine, Eloquent, Laravel DB)。ADODB 仍在維護但社區活躍度下降。