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

PHP COM組件連接Access數據庫:new COM實例化失敗排查

     編輯:程式設計綜合問答

錯誤現象

代碼執行到$conn = @new COM("ADODB.Connection")停止,僅輸出hello1,后續hello2未輸出,說明COM組件實例化失敗。

常見原因與解決

  1. PHP未啟用COM擴展:
    • php.ini中取消註釋extension=com_dotnet(Windows專有)。
    • 重啟Apache/Nginx+PHP-FPM。
  2. 系統未安裝MDAC/ACE驅動:
  3. PHP運行身份權限不足:
    • IIS應用程序池身份設為LocalSystem或有權限的用戶。
    • Apache服務登錄身份需有訪問.mdb文件權限。
  4. @運算符掩蓋錯誤:
    • 移除@,捕獲異常:try { $conn = new COM(...); } catch (com_exception $e) { die($e->getMessage()); }。

修正後代碼

<?php
try {
    $conn = new COM("ADODB.Connection"); // 移除@
    $connstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" . realpath("db.mdb");
    $conn->Open($connstr);
    
    $rs = new COM("ADODB.Recordset");
    $rs->Open("SELECT * FROM users", $conn);
    
    while (!$rs->EOF) {
        echo $rs->Fields["name"]->Value . "<br/>";
        $rs->MoveNext();
    }
    $rs->Close();
    $conn->Close();
} catch (com_exception $e) {
    echo "COM Error: " . $e->getMessage();
}
?>

關鍵點

  • 連接字符串推薦Microsoft.ACE.OLEDB.12.0(支持.accdb/.mdb),舊版用Microsoft.Jet.OLEDB.4.0。
  • realpath()確保絕對路徑,避免相對路徑失效。
  • 循環中用MoveNext()(大寫N),非Movenext()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved