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

PHP 連接 Access 資料庫:COM 元件 ADODB 完整範例與現代替代方案

     編輯:PHP 相關知識

傳統 COM 方式 (僅限 Windows + PHP COM 擴充)

<?php
// 建立 ADO 連線物件
$conn = @new COM("ADODB.Connection") or die("ADO Connection failed.");
$connStr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("DATUM/cnbt.mdb");
$conn->Open($connStr);

// 建立記錄集
$rs = @new COM("ADODB.Recordset");
$rs->Open("SELECT * FROM dbo_dirs", $conn, 1, 3); // 1=adOpenKeyset, 3=adLockOptimistic

// 迴圈讀取
while (!$rs->EOF) {
    echo $rs->Fields["title"]->Value . " ";
    $rs->MoveNext();
}

$rs->Close();
$conn->Close();
?>

關鍵參數說明

參數值說明
CursorType1 (adOpenKeyset)可前後移動、可見他人異動
LockType3 (adLockOptimistic)樂觀鎖定,更新時才鎖定
DBQrealpath(...)MDB 檔案絕對路徑

現代替代方案:PDO_ODBC (跨平台、無 COM 依賴)

<?php
$dsn = "odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" . realpath("DATUM/cnbt.mdb");
try {
    $pdo = new PDO($dsn, null, null, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]);
    
    $stmt = $pdo->query("SELECT title FROM dbo_dirs");
    while ($row = $stmt->fetch()) {
        echo $row['title'] . " ";
    }
} catch (PDOException $e) {
    die("連線失敗: " . $e->getMessage());
}
?>

PDO_ODBC 優勢

  • 支援 Linux/macOS (需安裝 unixODBC + mdbtools)
  • 標準 PDO 介面,可攜性高,單元測試友善
  • 支援預處理語句,防 SQL 注入
  • 錯誤處理統一用 Exception

Access 遷移建議

  1. 資料匯出:Access → CSV/SQL → MySQL/PostgreSQL/SQLite
  2. Upsizing Wizard:Access 內建遷移至 SQL Server 工具
  3. 應用層抽象:引入 Repository 模式,資料來源切換不影響業務邏輯

注意事項

  • Access 為檔案型資料庫,並發效能極差,不適合 Web 多使用者場景。
  • .accdb (Access 2007+) 需安裝 Microsoft Access Database Engine 2010/2016 Redistributable。
  • PHP COM 擴充需在 php.ini 啟用 extension=com_dotnet,且 Apache 需以具權限帳號執行。

新專案請直接採用 PDO_ODBC 或遷移至伺服器型資料庫;維護舊系統時,COM 方式仍為可行方案。

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