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

PHP + Oracle 分頁類:OCI8 驅動下的高效分頁解決方案

     編輯:PHP 相關知識

分頁類使用範例

<?php
$conn = ociplogon("test", "123456", "test123");
include_once "pager.inc.php";

$pager = new pager();

// 將查詢拆解為結構化陣列
$sqlArr = array(
    'conn'      => $conn,
    'fields'    => "id, name, age",
    'table'     => "test",
    'condition' => "age > 20",
    'order'     => "order by id desc"
);

// 每頁 10 筆,$page 為當前頁碼(自動從 $_GET 獲取)
if (!$pager->listn($sqlArr, 10, $page)) {
    die($pager->errmsg());
}

// 資料顯示
foreach ($pager->result as $row) {
    echo "id:{$row['ID']} name:{$row['NAME']} age:{$row['AGE']}<hr>";
}

// 分頁導航輸出
echo "{$pager->page} / {$pager->totalpage} 共 {$pager->total} 條記錄 ";
echo ($pager->prev) ? "<a href='?page={$pager->prev}'>上一頁</a> " : "上一頁 ";
echo ($pager->next) ? "<a href='?page={$pager->next}'>下一頁</a> " : "下一頁 ";

OCILogoff($conn);
?>

核心原理

  • 利用 Oracle ROWNUM 偽欄位配合子查詢實現分頁:
    SELECT * FROM (SELECT a.*, ROWNUM rn FROM (原始查詢) a WHERE ROWNUM <= :max) WHERE rn >= :min
  • 類別封裝連線、查詢組裝、總筆數統計、頁碼計算、導航生成,呼叫端極簡潔。
  • 支援任意複雜 WHERE/Order By 子句,僅需拆解欄位/表/條件/排序四要素。

效能優化建議

  • 確保 condition 欄位有索引,避免全表掃描。
  • 大資料量(百萬級+)考慮使用 ROW_NUMBER() OVER() 分析函數(Oracle 12c+)替代 ROWNUM。
  • 啟用 OCI8 持久連線 ocipconnect 減少連線開銷。
  • 分頁導航可加入「首頁/尾頁/頁碼輸入跳轉」增強 UX。

遷移提示

現代專案建議改用 PDO_OCI 或 Doctrine DBAL 等抽象層,分頁邏輯可封裝為通用 Repository 方法,降低資料庫耦合度。

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