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

PHP 連接 Access 數據庫的三種方式:PDO、ODBC、COM 組件

     編輯:PHP 相關知識

在 Windows 環境下,PHP 連接 Microsoft Access (.mdb/.accdb) 主要有三種途徑:PDO_ODBC、ODBC 擴展、COM 組件。各有優劣,適用場景不同。

方式一:PDO + ODBC 驅動(推薦,現代標準)

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "PDO 連接成功";
    
    // 查詢示例
    $stmt = $pdo->query("SELECT * FROM users");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        print_r($row);
    }
} catch (PDOException $e) {
    die("連接失敗: " . $e->getMessage());
}
  • 優勢:面向對象、預處理語句防注入、統一 API 支援多種數據庫、異常處理機制完善。
  • 要求:安裝 pdo_odbc 擴展、系統配置 ODBC 驅動(32/64 位匹配 PHP 進程位數)。
  • DSN 關鍵點:
    • Driver:{Microsoft Access Driver (*.mdb, *.accdb)} (ACE 驅動支援 .accdb) 或 {Microsoft Access Driver (*.mdb)} (舊版 JET 驅動)。
    • Dbq:使用 realpath() 獲取絕對路徑,避免相對路徑問題。

方式二:ODBC 擴展(過程式、輕量)

";
    }
}
odbc_close($conn);
  • 優勢:無需 PDO 擴展、輕量級、支援預處理 (odbc_prepare/execute)。
  • 劣勢:API 過程式風格、錯誤處理繁瑣、需預建系統/用戶 DSN(部署麻煩)。
  • 無 DSN 連接 (DSN-less):
    $conn = odbc_connect(
            "Driver={Microsoft Access Driver (*.mdb)};Dbq=" . realpath("db.mdb"),
            "", ""
        );

方式三:COM 組件(Windows 專有、功能全但重)

Open($dsn);

$rs = $conn->Execute("SELECT * FROM orders");
while (!$rs->EOF) {
    echo $rs->Fields("order_id")->Value . " - " . $rs->Fields("amount")->Value . "
"; $rs->MoveNext(); } $rs->Close(); $conn->Close();
  • 優勢:直接調用 ADO,功能最全(支援存儲過程、複雜事務、Schema 信息)、可操作 Excel/文本文件等非標準源。
  • 劣勢:
    • **僅限 Windows**,且需註冊 COM 組件(通常預裝)。
    • **性能差**:跨進程調用,開銷大。
    • **線程安全問題**:PHP 非線程安全 (NTS) 版本下使用 COM 易導致崩潰。
    • **部署複雜**:依賴 Office/ACE 引擎安裝、註冊表配置、DCOM 權限設置。

關鍵環境配置(三種方式通用)

  1. 驅動程序:安裝 Microsoft Access Database Engine (ACE),**位數必須與 PHP 進程一致**(64位 PHP 需 64位 ACE,反之亦然)。
  2. PHP 擴展:
    • PDO_ODBC: extension=pdo_odbc
    • ODBC: extension=odbc
    • COM: extension=com_dotnet (Windows 內建)
  3. 文件權限:Web 服務器進程用戶 (IIS_IUSRS / Apache 服務用戶) 需對 .mdb/.accdb 文件及其所在目錄有讀寫權限(Access 需創建 .ldb 鎖文件)。
  4. 路徑處理:統一使用 realpath() 獲取絕對路徑,避免工作目錄差異導致找不到文件。

選型建議

場景推薦方式理由
新項目/現代框架PDO_ODBC標準化、安全、可移植、生態豐富
舊系統維護/無 PDOODBC輕量、相容舊代碼
需 ADO 高級功能/操作 ExcelCOM功能最完整、但僅限 Windows、重
高併發 Web 應用**避免 Access**Access 非服務器級 DB,鎖競爭嚴重,建議遷移 SQLite/MySQL/PostgreSQL

總結

PHP 連 Access,**首選 PDO_ODBC + ACE 驅動**,標準、安全、可維護。僅在不得已時考慮 ODBC 或 COM。**生產環境高併發場景強烈建議遷移至正規關系數據庫**,Access 設計定位為單機桌面應用,非多用戶 Web 後端之選。

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