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

PHP 通過 COM 組件操作 Access 資料庫(ADODB 連接實戰)

     編輯:PHP 相關知識

適用場景

在 Windows 環境下,PHP 需要讀寫 legacy Access (.mdb/.accdb) 檔案,且不想安裝 ODBC 驅動時,啟用 php_com_dotnet 擴展並使用 ADODB.Connection 是最直接的方案。

環境準備

  1. php.ini 啟用:extension=com_dotnet、com.allow_dcom = true
  2. 確保系統安裝 Microsoft Access Database Engine(32/64 位需與 PHP 一致)
  3. 建立測試資料庫 C:\data\db.mdb,含資料表 comtest(id, title)

完整代碼範例

<?php
$dbPath = 'C:\\data\\db.mdb';

try {
    $conn = new COM('ADODB.Connection') or die('無法實例化 ADODB.Connection');
    // 使用 ACE OLEDB 12.0 驅動(支援 .accdb)
    $connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={$dbPath};Persist Security Info=False;";
    // 若為舊版 .mdb 可用:Provider=Microsoft.Jet.OLEDB.4.0
    $conn->Open($connStr);

    $rs = $conn->Execute('SELECT id, title FROM comtest');
    if ($rs === false) throw new Exception('查詢執行失敗');

    echo '<table border="1" cellpadding="5"><tr><th>ID</th><th>Title</th></tr>';
    while (!$rs->EOF) {
        echo '<tr>';
        echo '<td>' . htmlspecialchars($rs->Fields['id']->Value) . '</td>';
        echo '<td>' . htmlspecialchars($rs->Fields['title']->Value) . '</td>';
        echo '</tr>';
        $rs->MoveNext();
    }
    echo '</table>';

    $rs->Close();
    $conn->Close();
    $rs = null;
    $conn = null;
} catch (com_exception $e) {
    echo 'COM 錯誤: ' . $e->getMessage();
} catch (Exception $e) {
    echo '錯誤: ' . $e->getMessage();
}

常見坑位與解決

  • Class 'COM' not found:未啟用 com_dotnet 或 PHP 為 Non Thread Safe 版
  • Provider cannot be found:未安裝 Access Database Engine,或位數不匹配(PHP 64 位需安裝 64 位驅動)
  • Permission denied:資料庫檔案唯讀、或 IIS_IUSRS 無讀寫權限
  • 資料中文亂碼:確保 PHP 腳本編碼為 UTF-8,資料庫欄位為 Unicode 壓縮,必要時 iconv('UTF-8', 'BIG5//IGNORE', $val)

進階:參數化查詢防注入

$cmd = new COM('ADODB.Command');
$cmd->ActiveConnection = $conn;
$cmd->CommandText = 'SELECT * FROM comtest WHERE id = ?';
$cmd->CommandType = 1; // adCmdText
$param = $cmd->CreateParameter('pid', 3, 1, 10, $id); // adInteger, adParamInput
$cmd->Parameters->Append($param);
$rs = $cmd->Execute();

總結

COM + ADODB 是 Windows 平台 PHP 操作 Access 的「核武級」方案,功能強大但部署依賴較重。現代專案建議遷移至 SQLite 或 MySQL,若必須維護舊系統,請做好版本鎖定與容器化部署。

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