首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ADODB PHP 數據庫抽象層完全指南:多數據庫支持、智能插入、分頁、HTML 輸出、對象訪問

     編輯:PHP 相關知識

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/MariaDBmysqli原生、支持預處理、事務、SSL
PostgreSQLpostgres9 / postgres7版本對應
SQLitesqlite3 / pdo_sqlite文件嵌入式
Oracleoci8需 Oracle Instant Client
SQL Servermssqlnative / pdo_sqlsrvWindows 首選
Accessaccess僅 Windows/ODBC
DB2db2需 DB2 Client
通用 ODBCodbc / odbc_mssql最後手段

遷移建議:ADODB → 現代替代品

方案特點遷移難度
PDOPHP 內建、無依賴、預處理、事務、多驅動低(API 相似)
Doctrine DBAL強大 SQL 構建器、Schema 管理、類型系統、緩存中
Eloquent (Laravel)ActiveRecord、關係、遷移、觀察者、集合中高(架構差異)
Cycle ORMDataMapper、嚴格類型、無註解、高性能高

策略:新專案直接用 PDO/Doctrine DBAL/Eloquent;維護老專案時,ADODB 仍可穩定工作,但注意 PHP 8.x 兼容性(部分驅動需更新)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved