php 实现翻页
PHP 实现翻页功能
翻页功能在Web开发中非常常见,可以通过以下方法实现:
数据库查询与分页逻辑
假设使用MySQL数据库,通过LIMIT和OFFSET实现数据分页:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示数量
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $offset, $perPage";
$result = $conn->query($sql);
计算总页数
需要先获取总记录数以计算总页数:

$totalSql = "SELECT COUNT(*) as total FROM your_table";
$totalResult = $conn->query($totalSql);
$total = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($total / $perPage);
生成翻页链接
创建翻页导航HTML:
echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page='.($page - 1).'">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? ' class="active"' : '';
echo '<a href="?page='.$i.'"'.$active.'>'.$i.'</a>';
}
if ($page < $totalPages) {
echo '<a href="?page='.($page + 1).'">下一页</a>';
}
echo '</div>';
使用PDO的预处理语句(更安全)
为防止SQL注入,建议使用预处理语句:

$stmt = $conn->prepare("SELECT * FROM your_table LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
使用框架的分页功能
如果使用Laravel框架,可以简化分页实现:
$results = DB::table('your_table')->paginate(10);
return view('your_view', ['results' => $results]);
在视图中直接调用分页链接:
{{ $results->links() }}
性能优化建议
对于大数据量表,避免使用COUNT(*)计算总数,可以考虑缓存总记录数或使用近似值。在WHERE条件复杂时,确保相关字段已建立索引。






