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

PHP + MySQL 實現分頁功能:從基礎到進階

     編輯:PHP 相關知識

分頁核心:LIMIT 子句

MySQL 的 LIMIT offset, count 是分頁的關鍵:

  • offset:起始行號(從 0 開始)
  • count:每頁顯示記錄數
SELECT * FROM table ORDER BY id DESC LIMIT $start, $limit

方案一:簡易「上一頁 / 下一頁」

適用於記錄較少、不需頁碼導航的場景。

核心邏輯

  • 固定每頁顯示 $limit = 20 條。
  • $start 初始為 0,向後翻頁 $start += $limit,向前 $start -= $limit。
  • 查詢總記錄數 $num_max 控制「下一頁」顯示條件。

完整代碼示例 (page.php)

<?php
$limit = 20;                     // 每頁顯示數量
$start = isset($_GET['start']) ? (int)$_GET['start'] : 0; // 當前起始位置

$conn = mysqli_connect("localhost", "user", "pass", "database");
// 總記錄數
$totalRes = mysqli_query($conn, "SELECT * FROM `table`");
$num_max = mysqli_num_rows($totalRes);

// 當前頁數據
$res = mysqli_query($conn, "SELECT * FROM `table` ORDER BY id DESC LIMIT $start, $limit");
$num = mysqli_num_rows($res);

echo "<table><tr><td>分頁演示</td></tr>";
if ($num) {
    while ($row = mysqli_fetch_assoc($res)) {
        echo "<tr><td>{$row['val']}</td><td>{$row['val1']}</td></tr>";
    }
}

// 上一頁
$prev = $start - $limit;
if ($prev >= 0) {
    echo "<tr><td><a href='page.php?start=$prev'>上一頁</a></td></tr>";
}

// 下一頁
$next = $start + $limit;
if ($next < $num_max) {
    echo "<tr><td><a href='page.php?start=$next'>下一頁</a></td></tr>";
}
echo "</table>";
?>

注意:示例使用 mysqli 替代已棄用的 mysql 擴展,並對輸入做 (int) 強制類型轉換防注入。

方案二:數字分頁導航(進階)

當記錄很多時,需顯示頁碼(如 1 2 3 ... 10),邏輯較複雜:

  1. 計算總頁數 $totalPages = ceil($num_max / $limit)。
  2. 當前頁 $currentPage = floor($start / $limit) + 1。
  3. 生成頁碼鏈接,通常顯示當前頁前後各 N 頁,首尾頁固定顯示,中間用省略號。

此處不展開完整代碼,核心思路是根據 $currentPage 和 $totalPages 動態構建導航 HTML。成熟專案建議封裝為分頁類或使用框架內置分頁組件。

最佳實踐提醒

  • 使用 mysqli 或 PDO 替代舊 mysql 擴展。
  • 所有 SQL 參數務必預處理或轉義,防止注入。
  • 大數據量時,OFFSET 深分頁性能下降,可改用「游標分頁」(WHERE id > last_id LIMIT n)。
  • 前端可結合 AJAX 無刷新加載,提升體驗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved