分頁是 Web 應用核心功能。本文提供一個「開箱即用」的 PHP + MySQL 分頁模塊,涵蓋總記錄數統計、總頁數計算、當前頁處理、SQL LIMIT 構建、上一頁/下一頁導航生成,代碼結構清晰,適合快速集成至中小型專案。
<?php
// 1. 資料庫配置
$localhost = "localhost";
$username = "root";
$password = "root";
$db = "test";
$pagesize = 5; // 每頁顯示條數
// 2. 連接資料庫 (建議生產環境改用 PDO/mysqli)
$conn = mysql_connect($localhost, $username, $password);
if (!$conn) {
die("資料庫連接失敗: " . mysql_error());
}
mysql_query("SET NAMES 'UTF8'");
mysql_select_db($db);
// 3. 統計總記錄數
$total_sql = "SELECT COUNT(*) FROM page";
$total_result = mysql_query($total_sql);
$total_row = mysql_fetch_row($total_result)[0];
// 4. 計算總頁數
$total_pages = ceil($total_row / $pagesize);
// 5. 獲取當前頁碼 (預設第 1 頁)
$page = isset($_GET['p']) ? intval($_GET['p']) : 1;
$page = max(1, min($page, $total_pages)); // 邊界修正
// 6. 計算 LIMIT 偏移量
$offset = ($page - 1) * $pagesize;
// 7. 查詢當前頁數據
$sql = "SELECT * FROM page ORDER BY id LIMIT {$offset}, {$pagesize}";
$result = mysql_query($sql);
// 8. 輸出表格
echo "<p>PHP 分頁演示模塊</p>";
echo "<table border=1 cellspacing=0 width=60% align=center>";
echo "<tr><th>ID</th><th>NAME</th></tr>";
while ($row = mysql_fetch_assoc($result)) {
echo "<tr><td>{$row['id']}</td><td>{$row['name']}</td></tr>";
}
echo "</table>";
// 9. 生成上一頁/下一頁導航
$prev_page = $page - 1;
$next_page = $page + 1;
// 邊界保護
if ($prev_page < 1) $prev_page = 1;
if ($next_page > $total_pages) $next_page = $total_pages;
echo "<h3>";
echo "<a href='page.php?p={$prev_page}'>上一頁</a> | ";
echo "<a href='page.php?p={$next_page}'>下一頁</a>";
echo "</h3>";
// 10. 釋放資源
mysql_free_result($result);
mysql_close($conn);
?>
| 步驟 | 關鍵代碼 | 說明 |
|---|---|---|
| 總記錄數 | SELECT COUNT(*) | 避免 SELECT * 全表掃描 |
| 總頁數 | ceil($total / $pagesize) | 向上取整確保最後一頁顯示 |
| 當前頁 | intval($_GET['p']) | 強制轉整數防注入,邊界修正 |
| 偏移量 | ($page-1) * $pagesize | MySQL LIMIT offset, rows 語法 |
| 導航連結 | page.php?p={$page} | GET 參數傳遞頁碼,SEO 友好 |
mysql_* 函數,防 SQL 注入。COUNT(*) 結果。/page/3.html 靜態化風格。mysql_* 函數自 PHP 7.0 移除,生產環境必須升級至 PDO 或 mysqli。LIMIT offset, rows 在大偏移量 (百萬+) 時性能驟降,需採用「游標分頁」或「延遲關聯」優化。htmlspecialchars() 防 XSS。掌握「總數 → 總頁 → 當前頁 → 偏移量 → LIMIT → 導航」這條核心鏈路,即可靈活構建任意分頁場景。