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

PHP 分頁顯示核心邏輯與實戰代碼詳解

     編輯:PHP 綜合知識

分頁是 Web 應用基礎功能,核心在於 LIMIT offset, count 的參數計算。本文從數學模型推導到完整代碼實現,系統講解分頁邏輯。

核心數學模型

給定:

  • $pageSize:每頁記錄數(如 10)
  • $currentPage:當前頁碼(從 1 開始)

推導:

-- 第1頁: LIMIT 0, 10
-- 第2頁: LIMIT 10, 10
-- 第N頁: LIMIT ($currentPage-1)*$pageSize, $pageSize

完整實現代碼

// 1. 參數獲取與清洗
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$pageSize = 10;

// 2. 獲取總記錄數
$total = (int)mysql_result(mysql_query("SELECT COUNT(*) FROM `table`"), 0);

// 3. 計算總頁數
$pageCount = $total ? ceil($total / $pageSize) : 0;

// 4. 邊界修正
$page = min($page, max(1, $pageCount));

// 5. 構建導航 HTML
$nav = '';
if ($page > 1) {
    $nav .= '首頁 ';
    $nav .= '上一頁 ';
}
if ($page < $pageCount) {
    $nav .= '下一頁 ';
    $nav .= '尾頁 ';
}
$nav .= " 第 {$page}/{$pageCount} 頁 共 {$total} 條 ";

// 6. 查詢當前頁數據
$offset = ($page - 1) * $pageSize;
$sql = "SELECT * FROM `table` ORDER BY id DESC LIMIT {$offset}, {$pageSize}";
$result = mysql_query($sql);
$data = [];
while ($row = mysql_fetch_assoc($result)) {
    $data[] = $row;
}

進階優化方向

  • PDO 預處理:防 SQL 注入,支援多資料庫
  • 數字分頁:顯示頁碼範圍(如 1 ... 5 6 [7] 8 9 ... 20)
  • 游標分頁:大數據量下用 WHERE id > last_id LIMIT N 替代 OFFSET
  • 快取總數:Redis 緩存 COUNT(*) 減輕 DB 壓力

常見坑點提醒

  1. mysql_* 函數已棄用,新專案請用 mysqli 或 PDO
  2. 總記錄數為 0 時需處理 $pageCount = 0 邊界情況
  3. 頁碼參數必須嚴格 intval 防注入
  4. 大偏移量(深分頁)會導致 MySQL 掃描效能下降

掌握核心邏輯後,可根據業務靈活擴展 AJAX 無刷新分頁、搜尋條件保持、URL 美化等功能。

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