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

PHP 實現資料分頁顯示:從傳統 mysql 到現代 PDO 最佳實踐

     編輯:PHP 相關知識

PHP 分頁功能完整實作指南

分頁是 Web 應用中處理大量資料的核心機制。本文將從傳統 mysql_* 函式庫的教學範例出發,逐步重構為符合現代標準的 PDO 版本,並說明關鍵邏輯與安全性考量。

核心分頁邏輯

無論使用何種資料庫介面,分頁的數學模型皆相同:

  • 總筆數:SELECT COUNT(*) FROM table
  • 總頁數:ceil(總筆數 / 每頁筆數)
  • 位移量:($currentPage - 1) * $pageSize
  • 資料查詢:SELECT * FROM table LIMIT $offset, $pageSize

現代化 PDO 重構範例

<?php
// config/database.php 回傳 PDO 實例
$pdo = require 'config/database.php';

$pageSize = 10;
$pageNow  = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;

// 取得總筆數
$stmt = $pdo->query("SELECT COUNT(*) FROM user");
$totalRows = $stmt->fetchColumn();
$totalPages = (int)ceil($totalRows / $pageSize);

// 修正頁碼範圍
$pageNow = min($pageNow, max(1, $totalPages));

// 查詢當頁資料
$offset = ($pageNow - 1) * $pageSize;
$stmt = $pdo->prepare("SELECT user_name, name, email, tel FROM user LIMIT :offset, :limit");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $pageSize, PDO::PARAM_INT);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>用戶列表</title></head>
<body>
<table border="1">
    <tr><th>帳號</th><th>姓名</th><th>Email</th><th>電話</th></tr>
    <?php foreach ($users as $user): ?>
    <tr>
        <td><?= htmlspecialchars($user['user_name']) ?></td>
        <td><?= htmlspecialchars($user['name']) ?></td>
        <td><?= htmlspecialchars($user['email']) ?></td>
        <td><?= htmlspecialchars($user['tel']) ?></td>
    </tr>
    <?php endforeach; ?>
</table>

<div class="pagination">
    <?php for ($i = 1; $i <= $totalPages; $i++): ?>
        <a href="?page=<?= $i ?>" class="<?= $i === $pageNow ? 'active' : '' ?>"><?= $i ?></a>
    <?php endfor; ?>
</div>
</body>
</html>

關鍵改進點

  1. 棄用 mysql_*:PHP 7.0+ 已移除,必須改用 PDO 或 MySQLi。
  2. 預處理語句:防止 SQL 注入,即使是整數參數也應綁定。
  3. 輸出轉義:htmlspecialchars() 防範 XSS 攻擊。
  4. 頁碼邊界檢查:避免非法頁碼導致空白頁或錯誤。
  5. 分離關注點:資料庫設定、查詢邏輯、視圖模板分離,利於維護。

效能優化提示

  • 大資料量時,COUNT(*) 可能較慢,可考慮快取總筆數或使用近似值。
  • 深分頁(如第 10000 頁)的 OFFSET 效能差,建議改用游標分頁(WHERE id > last_id LIMIT 10)。
  • 適當增加複合索引覆蓋常用查詢欄位。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved