同樣原理適用於 SQL Server、Oracle、MySQL 等任何支援 ODBC 的資料庫。
odbctest.mdb(例:c:\odbctest.mdb)。Class,欄位:id (Number)、name (Text)。WebDB,描述自訂。c:\odbctest.mdb。webuser、密碼 webpassword(若資料庫有設定安全性)。<?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+ 可用 |
IUSR_機器名 或 IIS 執行身分讀寫權限;或在進階設定指定有權限的帳號。iconv 轉碼。新專案建議直接使用原生擴充:
mysqli / PDO_MySQLsqlsrv / PDO_SQLSRVpgsql / PDO_PGSQLoci8 / PDO_OCIsqlite3 / PDO_SQLITE若必須跨異構資料庫,可考慮 PDO::ODBC 統一介面,或使用中介層(如 API Platform、GraphQL Gateway)。
ODBC 是 Windows 平台上資料庫互通的標準橋樑。本文以 Access 為例示範從 DSN 建立到 PHP 程式碼的完整流程,雖然 Access 已非主流生產資料庫,但 ODBC 設定邏輯、錯誤處理模式、資源釋放習慣,對維護舊系統或整合 Legacy 資料源仍具參考價值。