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

PHP MySQL 分頁顯示完整教學與範例代碼

     編輯:PHP 相關知識

前言

Web 開發已成為分布式程式開發的主流,資料庫操作更是不可或缺的環節。當資料量龐大時,分頁顯示不僅能提升閱讀體驗,更能有效降低伺服器負載。本文將深入淺出地講解 PHP 配合 MySQL 實現分頁的核心原理、關鍵代碼解析,並提供完整可執行的範例供參考。

一、分頁程式的核心原理

分頁邏輯主要依賴兩個關鍵參數:

  • 每頁顯示筆數($pagesize):決定單頁呈現的資料量。
  • 當前頁碼($page):標識用戶正在瀏覽第幾頁。

MySQL 提供 LIMIT offset, rows 語法支援分頁查詢:

  • offset = $pagesize * ($page - 1),表示資料偏移量。
  • rows = $pagesize,表示需取回的筆數。

例如 SELECT * FROM table LIMIT 10, 10 會從第 11 筆資料開始,取回 10 筆記錄(即第 11~20 筆)。

二、關鍵代碼逐行解析

<?php
// 1. 設定每頁筆數
$pagesize = 10;

// 2. 連接資料庫(建議改用 mysqli 或 PDO)
$conn = mysql_connect("localhost", "root", "");
mysql_select_db("mydata", $conn);

// 3. 取得總記錄數
$rs = mysql_query("SELECT COUNT(*) FROM tb_product", $conn);
$myrow = mysql_fetch_array($rs);
$numrows = $myrow[0];

// 4. 計算總頁數(無條件進位)
$pages = ceil($numrows / $pagesize);

// 5. 取得當前頁碼,預設為第 1 頁
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;

// 6. 計算偏移量
$offset = $pagesize * ($page - 1);

// 7. 執行分頁查詢
$sql = "SELECT * FROM tb_product LIMIT $offset, $pagesize";
$result = mysql_query($sql, $conn);

// 8. 輸出資料與分頁導航(略)
?>

注意:mysql_* 函式已棄用,實務上請改用 mysqli 或 PDO 並採用預處理語句防止 SQL 注入。

三、建立測試用資料表

CREATE TABLE myTable (
    id INT NOT NULL AUTO_INCREMENT,
    news_title VARCHAR(50),
    news_cont TEXT,
    add_time DATETIME,
    PRIMARY KEY (id)
);

四、完整可執行範例(含 HTML 結構)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>PHP MySQL 分頁示例</title>
</head>
<body>
<?php
$conn = mysqli_connect("localhost", "root", "", "mydata");
if (!$conn) { die("連線失敗: " . mysqli_connect_error()); }

$pagesize = 5; // 每頁 5 筆
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$offset = ($page - 1) * $pagesize;

// 總筆數
$total = mysqli_fetch_row(mysqli_query($conn, "SELECT COUNT(*) FROM tb_product"))[0];
$totalPages = ceil($total / $pagesize);

// 分頁查詢
$sql = "SELECT * FROM tb_product LIMIT $offset, $pagesize";
$res = mysqli_query($conn, $sql);
?>

<table border="1" cellpadding="5">
    <tr><th>ID</th><th>產品名稱</th><th>價格</th></tr>
    <?php while ($row = mysqli_fetch_assoc($res)): ?>
    <tr>
        <td><?= $row['id'] ?></td>
        <td><?= htmlspecialchars($row['name']) ?></td>
        <td><?= $row['price'] ?></td>
    </tr>
    <?php endwhile; ?>
</table>

<div class="pagination">
    <?php if ($page > 1): ?>
        <a href="?page=1">首頁</a>
        <a href="?page=<?= $page-1 ?>">上一頁</a>
    <?php endif; ?>

    <span>第 <?= $page ?> / <?= $totalPages ?> 頁</span>

    <?php if ($page < $totalPages): ?>
        <a href="?page=<?= $page+1 ?>">下一頁</a>
        <a href="?page=<?= $totalPages ?>">末頁</a>
    <?php endif; ?>
</div>

<?php mysqli_close($conn); ?>
</body>
</html>

五、進階優化建議

  1. 使用 PDO + 預處理:提升安全性與可維護性。
  2. 加入快取機制:對不常變動的總筆數進行快取,減少 COUNT(*) 查詢。
  3. 前端 AJAX 分頁:配合 JavaScript 實現無刷新翻頁,提升使用者體驗。
  4. 游標式分頁:針對超大資料集,改用 WHERE id > last_id LIMIT n 避免 OFFSET 深分頁效能問題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved