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

PHP 連接 Access 數據庫實戰:COM/ADO 方式完整代碼與避坑指南

     編輯:PHP 綜合知識

適用場景

  • 遷移老項目(Delphi/VB + Access)至 Web
  • 無法安裝 MySQL/PostgreSQL 的受限環境
  • 輕量級桌面數據導入 Web 展示

核心代碼

Open($connStr);

// 4. 創建記錄集並查詢
$rs = new COM("ADODB.RecordSet");
$rs->Open("SELECT * FROM dbo_dirs", $conn, 1, 3); // 1=adOpenKeyset, 3=adLockOptimistic

// 5. 遍歷輸出
while (!$rs->EOF) {
    echo $rs->Fields["title"]->Value . "
"; $rs->MoveNext(); } // 6. 釋放資源 $rs->Close(); $conn->Close(); unset($rs, $conn); ?>

關鍵參數解析

參數常量值含義
CursorType1 (adOpenKeyset)可前後移動、可見他人修改
LockType3 (adLockOptimistic)樂觀鎖,更新時才鎖定
Options1 (adCmdText)命令類型為 SQL 文本

常見問題與解決

  1. 「Class 'COM' not found」:php.ini 啟用 extension=com_dotnet(Windows 專有)。
  2. 路徑包含中文/空格:realpath() 獲取真實路徑,連接字符串無需引號包裹路徑。
  3. 並發寫入衝突:Access 非服務器型 DB,高併發寫入極易損壞,建議:
    - 讀多寫少場景
    - PHP 端加文件鎖 flock()
    - 遷移至 SQLite/MySQL
  4. 64 位 PHP + 32 位 Access 驅動:需安裝 Microsoft Access Database Engine 2010/2016 64 位版,否則「Provider not found」。
  5. 欄位名為保留字:SQL 中用方括號包裹 SELECT [order], [group] FROM ...。

PDO/ODBC 替代方案(推薦新項目)

$dsn = "odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$dbPath;";
$pdo = new PDO($dsn);
$stmt = $pdo->query("SELECT * FROM dbo_dirs");
while ($row = $stmt->fetch()) { echo $row['title']."
"; }

優點:統一 PDO 接口、支援預處理語句、跨平台潛力(Linux + unixODBC + mdbtools)。

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