php分页功能的实现
分页功能的基本原理
分页功能的核心是通过SQL的LIMIT子句实现数据分段查询。LIMIT接受两个参数:起始位置偏移量和每页记录数。例如查询第2页(每页10条)的SQL语句为:
SELECT * FROM table LIMIT 10, 10
计算分页参数
需要从当前页码和每页记录数计算出SQL所需的偏移量:

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
获取总记录数
执行COUNT查询获取总记录数用于计算总页数:
$total = $pdo->query("SELECT COUNT(*) FROM table")->fetchColumn();
$totalPages = ceil($total / $perPage);
执行分页查询
使用计算好的偏移量进行数据查询:

$stmt = $pdo->prepare("SELECT * FROM table LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();
生成分页导航
创建带有页码链接的HTML导航栏:
echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a>";
}
echo '</div>';
优化用户体验
添加上一页/下一页按钮和页码范围限制:
$prevPage = $page > 1 ? $page - 1 : 1;
$nextPage = $page < $totalPages ? $page + 1 : $totalPages;
echo "<a href='?page=$prevPage'>上一页</a>";
// 显示当前页前后各2页
$start = max(1, $page - 2);
$end = min($totalPages, $page + 2);
for ($i = $start; $i <= $end; $i++) {
// 页码链接
}
echo "<a href='?page=$nextPage'>下一页</a>";
完整示例代码
// 分页参数
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
// 获取总记录数
$total = $pdo->query("SELECT COUNT(*) FROM products")->fetchColumn();
$totalPages = ceil($total / $perPage);
// 查询当前页数据
$stmt = $pdo->prepare("SELECT * FROM products LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 显示分页导航
echo '<div class="pagination">';
$prevPage = $page > 1 ? $page - 1 : 1;
echo "<a href='?page=$prevPage'>上一页</a>";
$start = max(1, $page - 2);
$end = min($totalPages, $page + 2);
for ($i = $start; $i <= $end; $i++) {
$active = $i == $page ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a>";
}
$nextPage = $page < $totalPages ? $page + 1 : $totalPages;
echo "<a href='?page=$nextPage'>下一页</a>";
echo '</div>';






