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

PHP ODBC 函式完整分類參考:連線、操作、資訊獲取三大類

     編輯:PHP 綜合知識

前言

ODBC (Open Database Connectivity) 提供統一介面存取不同資料庫(MSSQL、Access、MySQL、PostgreSQL 等)。PHP ODBC 擴展需安裝 php-odbc 並啟用 extension=odbc。現代專案建議改用 PDO_ODBC 或原生 PDO 驅動。

一、連線管理函式

函式說明範例
odbc_connect(dsn, user, pass, cursor_type)建立連線,回傳連線資源$conn = odbc_connect('MyDSN', 'user', 'pass');
odbc_pconnect(dsn, user, pass, cursor_type)持久連線(跨請求重用)同上,適合高頻存取
odbc_close(resource $conn)關閉指定連線odbc_close($conn);
odbc_close_all()關閉所有開啟連線腳本結束自動呼叫

DSN 設定方式

  • 系統 DSN: 控制台 → 系統管理工具 → ODBC 資料來源 → 系統 DSN
  • 無 DSN 連線字串:
    odbc_connect("Driver={SQL Server};Server=192.168.1.10;Database=test;", 'user', 'pass')

二、SQL 執行與結果處理

函式說明
odbc_exec(conn, sql)直接執行 SQL,回傳結果集資源
odbc_prepare(conn, sql)預備陳述式,回傳 statement 資源
odbc_execute(stmt, params)執行預備陳述式(參數綁定)
odbc_do(conn, sql)odbc_exec 別名
odbc_commit(conn)提交交易
odbc_rollback(conn)回滾交易
odbc_autocommit(conn, bool)設定/取得自動提交模式

結果集讀取

函式說明
odbc_fetch_row(result, row_num)移動到指定行(1-based),回傳 bool
odbc_fetch_array(result, row_num)取得關聯+數字索引陣列
odbc_fetch_object(result, row_num)取得物件
odbc_fetch_into(result, &array, row_num)取得數字索引陣列(參考傳遞)
odbc_result(result, field)取得單一欄位值(欄位名或索引)
odbc_result_all(result, format)輸出 HTML 表格(除錯用)
odbc_free_result(result)釋放結果集資源
odbc_num_rows(result)取得行數(部分驅動不支援)
odbc_num_fields(result)取得欄位數

三、中繼資料與目錄函式

四、欄位屬性函式

函式說明
odbc_tables(conn, qualifier, owner, name, type)列出資料表
odbc_columns(conn, qualifier, owner, table, column)列出欄位定義
odbc_columnprivileges(conn, qualifier, owner, table, column)欄位權限
odbc_primarykeys(conn, qualifier, owner, table)主鍵欄位
odbc_foreignkeys(conn, pk_qualifier, pk_owner, pk_table, fk_qualifier, fk_owner, fk_table)外鍵關係
odbc_procedures(conn, qualifier, owner, name)預存程序
odbc_procedurecolumns(conn, qualifier, owner, proc, column)程序參數
odbc_statistics(conn, qualifier, owner, table, unique, accuracy)索引/統計資訊
odbc_tableprivileges(conn, qualifier, owner, name)資料表權限
odbc_specialcolumns(conn, type, qualifier, owner, table, scope, nullable)特殊欄位(ROWID、最佳行識別欄位)
odbc_gettypeinfo(conn, type)資料類型對應表
函式說明
odbc_field_name(result, index)欄位名稱(1-based 索引)
odbc_field_type(result, index)資料類型字串
odbc_field_len(result, index)欄位長度
odbc_field_precision(result, index)精確度(數值類型)
odbc_field_scale(result, index)小數位數
odbc_field_num(result, name)欄位索引(1-based)

五、錯誤處理

函式說明
odbc_error(conn)最後錯誤 SQLSTATE 代碼
odbc_errormsg(conn)最後錯誤訊息

六、其他設定

函式說明
odbc_longreadlen(result, length)設定 LONG/TEXT 欄位最大讀取長度(預設 4096)
odbc_binmode(result, mode)二進位資料模式:ODBC_BINMODE_PASSTHRU/RETURN/CONVERT
odbc_setoption(conn, function, option, param)底層驅動選項設定
odbc_next_result(result)檢查是否有下一個結果集(多重結果)
odbc_cursor(result)取得游標名稱

完整範例:查詢 MSSQL

<?php
// 連線
$conn = odbc_connect("Driver={ODBC Driver 17 for SQL Server};Server=192.168.1.10;Database=test;", 'sa', 'password');
if (!$conn) {
    die("連線失敗: " . odbc_errormsg());
}

// 執行查詢
$sql = "SELECT id, name, email FROM users WHERE status = ?";
$stmt = odbc_prepare($conn, $sql);
if (!$stmt) die("預備失敗: " . odbc_errormsg($conn));

$params = ['active'];
if (!odbc_execute($stmt, $params)) {
    die("執行失敗: " . odbc_errormsg($conn));
}

// 讀取結果
$results = [];
while (odbc_fetch_row($stmt)) {
    $results[] = [
        'id'    => odbc_result($stmt, 'id'),
        'name'  => odbc_result($stmt, 'name'),
        'email' => odbc_result($stmt, 'email'),
    ];
}

odbc_free_result($stmt);
odbc_close($conn);

print_r($results);
?>

現代替代方案建議

方案優點適用場景
PDO_ODBC統一 PDO 介面、參數綁定更安全、支援交易、例外處理新專案、需跨資料庫
PDO_SQLSRV / PDO_DBLIB原生 MSSQL 驅動、效能更好、支援新功能專用 MSSQL 專案
ADOdb資料庫抽象層、快取、Active Record、支援多種 DB舊專案遷移、需快速開發
Doctrine DBAL強大 SQL 建構器、Schema 管理、型別映射現代框架專案

常見問題

  1. 中文亂碼: 確保連線字串含 CharacterSet=UTF-8,資料庫欄位為 NVARCHAR,PHP 腳本為 UTF-8。
  2. odbc_num_rows() 回傳 -1:部分驅動不支援,改用 SELECT COUNT(*) 或迴圈計數。
  3. 長文字截斷: 執行前呼叫 odbc_longreadlen($result, 1000000)。
  4. 64 位元系統: 需安裝 64 位元 ODBC 驅動程式,並用 64 位元 PHP。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved