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

PHP 透過 ODBC 存取資料庫:以 MS Access 為例的完整設定指南

     編輯:PHP 綜合知識

適用環境

  • Windows 9x / NT / 2000 / XP
  • Web Server:IIS、Apache、PWS 等
  • PHP 3 / PHP 4
  • ODBC 驅動程式:Microsoft Access Driver (*.mdb)

同樣原理適用於 SQL Server、Oracle、MySQL 等任何支援 ODBC 的資料庫。

三步驟完成設定

步驟 1:建立測試資料庫

  1. 開啟 MS Access,建立 odbctest.mdb(例:c:\odbctest.mdb)。
  2. 建立資料表 Class,欄位:id (Number)、name (Text)。
  3. 輸入測試資料(如 6 筆學生資料)。

步驟 2:建立系統 DSN (System DSN)

  1. 控制台 → ODBC 資料來源 → 系統 DSN 頁籤 → 新增。
  2. 選擇 Microsoft Access Driver (*.mdb) → 完成。
  3. 資料來源名稱:WebDB,描述自訂。
  4. 按 選取 選擇 c:\odbctest.mdb。
  5. 按 進階 → 輸入登入名稱 webuser、密碼 webpassword(若資料庫有設定安全性)。
  6. 確定完成。

步驟 3:撰寫 PHP 測試腳本

<?php
function Error_Handler($msg, $cnx) {
    echo "$msg\n";
    odbc_close($cnx); // 釋放連線資源
    exit();
}

// 建立 ODBC 連線
$cnx = odbc_connect('WebDB', 'webuser', 'webpassword');
// 若權限問題,可嘗試系統管理員帳號
// $cnx = odbc_connect('WebDB', 'sa', 'sa_password');

if (!$cnx) Error_Handler("odbc_connect 失敗", $cnx);

// 執行查詢
$cur = odbc_exec($cnx, "SELECT id, name FROM Class");
if (!$cur) Error_Handler("odbc_exec 失敗 (無游標)", $cnx);

echo "<table border=1><tr><th>座號</th><th>姓名</th></tr>\n";
$num_row = 0;

while (odbc_fetch_row($cur)) {
    $num_row++;
    $id   = odbc_result($cur, 1); // 第 1 欄位
    $name = odbc_result($cur, 2); // 第 2 欄位
    echo "<tr><td>$id</td><td>$name</td></tr>\n";
}

echo "<tr><td colspan=2>共 $num_row 人</td></tr></table>";
odbc_close($cnx);
?>

關鍵函數對照表

函數用途備註
odbc_connect(dsn, user, pwd)建立連線回傳連線資源,失敗回傳 false
odbc_exec(cnx, sql)執行 SQL 回傳游標類似 mysql_query
odbc_fetch_row(cur)游標前進一列回傳 true/false,可用於 while 迴圈
odbc_result(cur, field_num|name)取得欄位值索引從 1 開始,也可用欄位名稱
odbc_close(cnx)關閉連線務必在結束前呼叫釋放資源
odbc_error() / odbc_errormsg()取得錯誤代碼/訊息PHP 4.0.5+ 可用

常見問題與解決

  • 找不到 DSN:確認建立的是「系統 DSN」而非「使用者 DSN」,Web 服務執行身分需有讀取權限。
  • 權限被拒:Access 檔案需給 IUSR_機器名 或 IIS 執行身分讀寫權限;或在進階設定指定有權限的帳號。
  • 中文亂碼:確認 PHP 腳本編碼、資料庫編碼、ODBC 驅動版本一致;必要時用 iconv 轉碼。
  • 效能:ODBC 層級較高,大量查詢建議改用原生驅動,或啟用連線池。

現代化替代方案

新專案建議直接使用原生擴充:

  • MySQL:mysqli / PDO_MySQL
  • SQL Server:sqlsrv / PDO_SQLSRV
  • PostgreSQL:pgsql / PDO_PGSQL
  • Oracle:oci8 / PDO_OCI
  • SQLite:sqlite3 / PDO_SQLITE

若必須跨異構資料庫,可考慮 PDO::ODBC 統一介面,或使用中介層(如 API Platform、GraphQL Gateway)。

結語

ODBC 是 Windows 平台上資料庫互通的標準橋樑。本文以 Access 為例示範從 DSN 建立到 PHP 程式碼的完整流程,雖然 Access 已非主流生產資料庫,但 ODBC 設定邏輯、錯誤處理模式、資源釋放習慣,對維護舊系統或整合 Legacy 資料源仍具參考價值。

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