php怎么实现分页
PHP 实现分页的方法
使用 LIMIT 和 OFFSET 进行数据库查询
分页的核心是通过 SQL 的 LIMIT 和 OFFSET 子句限制返回的数据量。假设每页显示 10 条数据,当前页码为 $page:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM articles LIMIT $perPage OFFSET $offset";
$result = $pdo->query($sql);
计算总页数
需要查询总记录数以计算总页数:
$totalSql = "SELECT COUNT(*) as total FROM articles";
$totalResult = $pdo->query($totalSql)->fetch();
$totalPages = ceil($totalResult['total'] / $perPage);
生成分页链接
在页面底部生成分页导航链接:
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
使用 Bootstrap 分页组件(可选)
如果需要更美观的分页,可以集成 Bootstrap:
echo '<nav aria-label="Page navigation"><ul class="pagination">';
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>";
}
echo '</ul></nav>';
防止无效页码
添加对页码的验证:
$page = max(1, min($page, $totalPages));
完整示例代码
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 获取总记录数
$totalResult = $pdo->query("SELECT COUNT(*) as total FROM articles")->fetch();
$totalPages = ceil($totalResult['total'] / $perPage);
// 修正页码
$page = max(1, min($page, $totalPages));
$offset = ($page - 1) * $perPage;
// 获取当前页数据
$sql = "SELECT * FROM articles LIMIT $perPage OFFSET $offset";
$articles = $pdo->query($sql)->fetchAll();
// 显示分页导航
echo '<nav aria-label="Page navigation"><ul class="pagination">';
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>";
}
echo '</ul></nav>';






