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

PHP ODBC 資料庫連接完整教學

     編輯:PHP 入門

PHP ODBC 資料庫連接完整教學


什麼是 ODBC?

ODBC (Open Database Connectivity) 是一套標準 API,讓應用程式能以統一介面存取不同資料庫 (Access、SQL Server、Oracle、MySQL 等)。PHP 透過 odbc_* 函數族群支援 ODBC 連接。


建立系統 DSN (Windows 範例:MS Access)

  1. 控制台 → 系統管理工具 → 資料來源 (ODBC)。
  2. 系統 DSN 分頁 → 新增。
  3. 選擇 Microsoft Access Driver (*.mdb, *.accdb) → 完成。
  4. 選擇資料庫檔案 → 設定資料來源名稱 (DSN),如 northwind。
  5. 確定完成。

注意: DSN 必須建立在執行 PHP 的伺服器上。若網站託管於遠端主機,請要求主機商建立或改用無 DSN 連接字串 (DSN-less)。


核心函數

函數說明
odbc_connect($dsn, $user, $pass, $cursorType)建立連接,返回連接資源
odbc_pconnect()持久連接
odbc_exec($conn, $sql)執行 SQL,返回結果集資源
odbc_prepare() / odbc_execute()預處理/執行參數化查詢
odbc_fetch_row($result, $rowNumber)游標前進到下一列 (或指定列),成功返回 true
odbc_result($result, $field)取得當前列的欄位值 (欄位編號或名稱)
odbc_fetch_array()取得當前列為關聯+數字陣列 (PHP 4.0.6+)
odbc_fetch_object()取得當前列為物件
odbc_num_rows($result)結果集列數 (某些驅動不支援)
odbc_num_fields($result)欄位數
odbc_field_name($result, $index)取得欄位名稱
odbc_close($conn)關閉連接
odbc_error($conn) / odbc_errormsg($conn)取得錯誤代碼/訊息

基本查詢範例

<?php
$conn = odbc_connect('northwind', '', '');
if (!$conn) {
    exit('連接失敗: ' . odbc_errormsg());
}

$sql = "SELECT * FROM customers";
$rs = odbc_exec($conn, $sql);
if (!$rs) {
    exit('SQL 錯誤: ' . odbc_errormsg($conn));
}

echo "<table border='1' cellpadding='5'>
<tr><th>CompanyName</th><th>ContactName</th></tr>";

while (odbc_fetch_row($rs)) {
    $comp = odbc_result($rs, 'CompanyName');
    $cont = odbc_result($rs, 'ContactName');
    echo "<tr><td>" . htmlspecialchars($comp) . "</td>";
    echo "<td>" . htmlspecialchars($cont) . "</td></tr>";
}

echo "</table>";
odbc_close($conn);
?>

DSN-less 連接字串 (免建立系統 DSN)

<?php
// Microsoft Access
$connStr = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\path\\to\\db.accdb;";

// SQL Server
$connStr = "Driver={SQL Server};Server=192.168.1.100;Database=mydb;";

$conn = odbc_connect($connStr, 'username', 'password');
// 後續操作相同
?>

預處理語句防注入

<?php
$stmt = odbc_prepare($conn, "SELECT * FROM users WHERE email = ?");
$email = 'test@example.com';
odbc_execute($stmt, [$email]);
while (odbc_fetch_row($stmt)) {
    // ...
}
?>

常見問題與解決方案

  • 「Data source name not found」: DSN 名稱拼寫錯誤、未建立系統 DSN、32/64 位元驅動不匹配 (PHP 為 64 位元需 64 位元 ODBC 驅動)。
  • 中文亂碼: 確保資料庫、連接字串、PHP 頁面編碼一致 (UTF-8),必要時在連接字串加入 CHARSET=UTF8。
  • 效能: 大量資料建議使用持久連接 odbc_pconnect()、預處理語句、適當索引。
  • 替代方案: 新專案建議改用 PDO (支援 ODBC 驅動 pdo_odbc) 或原生驅動 (mysqli、pdo_sqlsrv、pdo_oci 等),功能更完整、社群支援更好。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved