php怎么实现分页
PHP 实现分页的方法
使用 MySQL 的 LIMIT 语句
分页的核心逻辑是通过 SQL 的 LIMIT 子句限制每次查询的数据量。假设每页显示 10 条数据,当前页码为 $page:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $offset, $perPage";
$result = $conn->query($sql);
计算总页数
需要先查询总数据量,再计算总页数:
$totalQuery = "SELECT COUNT(*) as total FROM your_table";
$totalResult = $conn->query($totalQuery);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);
生成分页链接
在页面底部生成分页导航,通常包含“上一页”、“下一页”和页码链接:

echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page=' . ($page - 1) . '">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page=' . $i . '"' . ($i == $page ? ' class="active"' : '') . '>' . $i . '</a>';
}
if ($page < $totalPages) {
echo '<a href="?page=' . ($page + 1) . '">下一页</a>';
}
echo '</div>';
使用 Bootstrap 分页样式
如果需要更美观的分页,可以结合 Bootstrap 的 pagination 类:
echo '<nav aria-label="Page navigation"><ul class="pagination">';
if ($page > 1) {
echo '<li class="page-item"><a class="page-link" href="?page=' . ($page - 1) . '">上一页</a></li>';
}
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? ' active' : '';
echo '<li class="page-item' . $active . '"><a class="page-link" href="?page=' . $i . '">' . $i . '</a></li>';
}
if ($page < $totalPages) {
echo '<li class="page-item"><a class="page-link" href="?page=' . ($page + 1) . '">下一页</a></li>';
}
echo '</ul></nav>';
防止页码越界
确保页码在有效范围内(1 到 $totalPages):

$page = max(1, min($page, $totalPages));
使用预处理语句防止 SQL 注入
如果分页参数来自用户输入,应使用预处理语句:
$stmt = $conn->prepare("SELECT * FROM your_table LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $perPage);
$stmt->execute();
$result = $stmt->get_result();
封装为函数
可以将分页逻辑封装为可复用的函数:
function getPaginationData($conn, $table, $perPage, $page) {
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM $table LIMIT $offset, $perPage";
$result = $conn->query($sql);
$totalQuery = "SELECT COUNT(*) as total FROM $table";
$totalResult = $conn->query($totalQuery);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);
return [
'data' => $result->fetch_all(MYSQLI_ASSOC),
'totalPages' => $totalPages,
'currentPage' => $page
];
}
通过以上方法,可以实现灵活且安全的分页功能。






