当前位置:首页 > PHP

php 实现分页查询

2026-03-13 08:10:39PHP

PHP 实现分页查询的方法

分页查询是 Web 开发中常见的需求,以下是一种典型的实现方式,适用于 MySQL 数据库。

数据库查询与分页逻辑

假设有一个 articles 表,需要分页显示数据:

php 实现分页查询

// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

// 获取当前页码,默认为第1页
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示数量

// 计算总记录数和总页数
$total = $db->query('SELECT COUNT(*) FROM articles')->fetchColumn();
$totalPages = ceil($total / $perPage);

// 确保页码在有效范围内
$page = max($page, 1);
$page = min($page, $totalPages);

// 计算偏移量
$offset = ($page - 1) * $perPage;

// 查询当前页数据
$stmt = $db->prepare('SELECT * FROM articles LIMIT :limit OFFSET :offset');
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);

分页导航生成

在页面底部显示分页导航:

php 实现分页查询

// 生成分页链接
$pagination = '';
if ($totalPages > 1) {
    $pagination .= '<div class="pagination">';

    // 上一页链接
    if ($page > 1) {
        $pagination .= '<a href="?page='.($page - 1).'">上一页</a>';
    }

    // 页码链接
    for ($i = 1; $i <= $totalPages; $i++) {
        if ($i == $page) {
            $pagination .= '<span class="current">'.$i.'</span>';
        } else {
            $pagination .= '<a href="?page='.$i.'">'.$i.'</a>';
        }
    }

    // 下一页链接
    if ($page < $totalPages) {
        $pagination .= '<a href="?page='.($page + 1).'">下一页</a>';
    }

    $pagination .= '</div>';
}

// 输出分页导航
echo $pagination;

使用 Bootstrap 样式

如果需要更美观的分页样式,可以结合 Bootstrap:

$pagination = '<nav aria-label="Page navigation"><ul class="pagination">';

if ($page > 1) {
    $pagination .= '<li class="page-item"><a class="page-link" href="?page='.($page - 1).'">Previous</a></li>';
}

for ($i = 1; $i <= $totalPages; $i++) {
    $active = ($i == $page) ? ' active' : '';
    $pagination .= '<li class="page-item'.$active.'"><a class="page-link" href="?page='.$i.'">'.$i.'</a></li>';
}

if ($page < $totalPages) {
    $pagination .= '<li class="page-item"><a class="page-link" href="?page='.($page + 1).'">Next</a></li>';
}

$pagination .= '</ul></nav>';

安全注意事项

  1. 始终验证和过滤用户输入的页码参数
  2. 使用预处理语句防止 SQL 注入
  3. 对大量数据分页时考虑性能优化,如添加适当索引

性能优化建议

对于大型数据集,传统 LIMIT/OFFSET 分页在深分页时性能较差。替代方案包括:

// 使用"上一页/下一页"方式代替页码导航
// 或使用基于游标的分页(记录最后显示的ID)
$lastId = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$stmt = $db->prepare('SELECT * FROM articles WHERE id > :last_id ORDER BY id LIMIT :limit');
$stmt->bindValue(':last_id', $lastId, PDO::PARAM_INT);
$stmt->bindValue(':limit', $perPage, PDO::PARAM_INT);

标签: 分页php
分享给朋友:

相关文章

vue实现分页

vue实现分页

Vue 实现分页的方法 使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成到 Vue 项目中。 安装 Element UI:…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Sessi…

vue 分页的实现

vue 分页的实现

分页组件实现 使用Vue实现分页功能通常需要结合后端API和前端组件。以下是一种常见的实现方式: 模板部分 <template> <div class="pagina…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…