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

PHP 透過 ODBC 連接 Access、SQL Server 等資料庫實作

     編輯:PHP 綜合知識

ODBC (Open Database Connectivity) 是資料庫存取的工業標準介面,PHP 提供 odbc_ 系列函式支援連接 Access、SQL Server、Excel 等多種資料源。本文整理核心函式並提供分頁查詢完整範例。

核心 ODBC 函式速查

函式用途說明
odbc_connect(dsn, user, password)建立 ODBC 連線DSN 可為系統/使用者/檔案 DSN,或無 DSN 連線字串
odbc_exec(conn, query) / odbc_do()執行 SQL 查詢回傳結果集識別碼
odbc_fetch_row(result, row)擷取下一列(或指定列)row 參數可選,無資料回傳 false
odbc_result(result, field)取得目前列指定欄位值欄位可用名稱或索引
odbc_close(conn)關閉連線若有開啟交易會失敗
odbc_num_rows(result)取得結果列數部分驅動程式不支援
odbc_num_fields(result)取得欄位數
odbc_field_name(result, index)取得欄位名稱1 起始索引

完整分頁查詢範例

<?php
// 設定每頁顯示筆數
$show_num = 10;
$spages = $pages;  // 保存頁碼避免被修改

// 連線設定
$dsn = "localhost";
$user = "sa";
$password = "";

// 計算總筆數
$rs_num = "select count(*) as id from bbs where zu='0' and lei='$lei'";
$conn_id = odbc_connect($dsn, $user, $password);
$rnum = odbc_exec($conn_id, $rs_num);

$total_rs = 0;
while (odbc_fetch_row($rnum)) {
    $total_rs = odbc_result($rnum, "id");
}

// 計算總頁數
$nnn = $total_rs / $show_num;
$hnnn = intval($nnn);
$cnnnn = $nnn - $hnnn;

switch ($cnnnn) {
    case "0":
        $hnnn++;
        $nnn = $hnnn;
        break;
    default:
        $nnn = $hnnn;
        break;
}
if ($nnn == 0) $nnn++;

// 頁碼導航邏輯
$fore = $pages - 1;
$next = $pages + 1;

if ($fore > 0) {
    echo "<a href=\"?pages=1\">首頁</a>";
    echo "<a href=\"?pages=$fore\">前頁</a>";
}
if ($pages < $nnn) {
    echo "<a href=\"?pages=$next\">後頁</a>";
    echo "<a href=\"?pages=$nnn\">尾頁</a>";
}
echo "共 $nnn 頁";

// 查詢資料
$query_string = "SELECT * FROM table WHERE condition ORDER BY you_wanted_order";
$cur = odbc_exec($conn_id, $query_string);

// 移動游標到當頁起始位置
$cnum = ($pages - 1) * $show_num;
if ($cnum != 0) {
    for ($i = 0; $i <= $cnum; odbc_fetch_row($cur)) { $i++; }
}

// 顯示當頁資料
$i = 1;
while (odbc_fetch_row($cur)) {
    // 這裡輸出各欄位資料
    // echo odbc_result($cur, "field_name");
    if ($i == $show_num) break;
    $i++;
}

odbc_close($conn_id);
?>

關鍵技術點解析

1. DSN 設定方式

  • 系統 DSN:控制台「系統管理工具」→「資料來源 (ODBC)」→「系統 DSN」頁籤新增
  • 無 DSN 連線字串:"Driver={SQL Server};Server=localhost;Database=mydb;Uid=sa;Pwd=;"

2. 游標定位策略

範例採用「空迴圈跳過」方式定位至目標頁起始列:

for ($i = 0; $i <= $cnum; odbc_fetch_row($cur)) { $i++; }

此法在大量資料時效能較差,生產環境建議使用 SQL 端分頁(如 SQL Server 的 ROW_NUMBER() OVER() 或 OFFSET/FETCH)。

3. 總頁數計算邏輯

範例使用 switch 處理餘數判斷,實際可簡化為:

$total_pages = ceil($total_rs / $show_num);

4. 錯誤處理建議

  • 檢查 odbc_connect()、odbc_exec() 回傳值
  • 使用 odbc_error()、odbc_errormsg() 取得詳細錯誤
  • 連線失敗時提供友善提示而非直接中斷

現代替代方案

針對特定資料庫,建議使用原生擴充功能:

  • SQL Server:sqlsrv 或 pdo_sqlsrv
  • Access:pdo_odbc(仍需 ODBC 驅動)
  • 通用:PDO::ODBC 提供統一介面

ODBC 雖屬通用標準,但效能與功能通常不如原生驅動,僅在無原生驅動或需跨資料庫平台時建議使用。

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