<?php
// 假設已建立 $pdo 連線
$id = (int)($_GET['id'] ?? 0);
if (!$id) exit('參數錯誤');
// 上一篇
$stmt = $pdo->prepare('SELECT id, title FROM article WHERE id < ? ORDER BY id DESC LIMIT 1');
$stmt->execute([$id]);
$prev = $stmt->fetch();
// 下一篇
$stmt = $pdo->prepare('SELECT id, title FROM article WHERE id > ? ORDER BY id ASC LIMIT 1');
$stmt->execute([$id]);
$next = $stmt->fetch();
// 輸出
echo '<div class="article-nav">';
if ($prev) {
echo '<a href="article.php?id=' . $prev['id'] . '" class="prev">← 上一篇:' . htmlspecialchars($prev['title']) . '</a>';
} else {
echo '<span class="prev disabled">← 上一篇:無</span>';
}
if ($next) {
echo '<a href="article.php?id=' . $next['id'] . '" class="next">下一篇:' . htmlspecialchars($next['title']) . ' →</a>';
} else {
echo '<span class="next disabled">下一篇:無 →</span>';
}
echo '</div>';
?>
SELECT
(SELECT id FROM article WHERE id < ? ORDER BY id DESC LIMIT 1) AS prev_id,
(SELECT title FROM article WHERE id < ? ORDER BY id DESC LIMIT 1) AS prev_title,
(SELECT id FROM article WHERE id > ? ORDER BY id ASC LIMIT 1) AS next_id,
(SELECT title FROM article WHERE id > ? ORDER BY id ASC LIMIT 1) AS next_title;
以預處理綁定 4 次同樣參數,單次往返資料庫,減少連線開銷。
若資料表有 `deleted_at` 或 `status` 欄位,查詢需加入 `WHERE status = 1 AND deleted_at IS NULL`,並建立複合索引 (status, id) 確保效能。