当前位置:首页 > 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
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…