当前位置:首页 > PHP

php 实现分页查询

2026-02-15 09:05:50PHP

PHP 实现分页查询的方法

获取当前页码和每页显示数量

通过 $_GET 获取当前页码参数,默认设置为第一页。每页显示数量可以根据需求设定固定值或动态获取。

$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$items_per_page = 10; // 每页显示10条数据

计算总记录数和总页数

查询数据库获取总记录数,并计算总页数。确保当前页码不超过总页数范围。

$total_items = $db->query("SELECT COUNT(*) FROM table_name")->fetchColumn();
$total_pages = ceil($total_items / $items_per_page);

// 确保当前页码在有效范围内
if ($current_page < 1) {
    $current_page = 1;
} elseif ($current_page > $total_pages) {
    $current_page = $total_pages;
}

计算数据查询的偏移量

根据当前页码和每页显示数量,计算 SQL 查询的偏移量。

$offset = ($current_page - 1) * $items_per_page;

执行分页查询

使用 LIMITOFFSET 进行分页查询,获取当前页的数据。

php 实现分页查询

$stmt = $db->prepare("SELECT * FROM table_name LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', $items_per_page, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

生成分页导航链接

根据总页数和当前页码,生成分页导航链接,方便用户跳转到不同页码。

$pagination = '';
if ($total_pages > 1) {
    $pagination .= '<div class="pagination">';
    // 上一页链接
    if ($current_page > 1) {
        $pagination .= '<a href="?page=' . ($current_page - 1) . '">上一页</a>';
    }
    // 页码链接
    for ($i = 1; $i <= $total_pages; $i++) {
        if ($i == $current_page) {
            $pagination .= '<span class="current">' . $i . '</span>';
        } else {
            $pagination .= '<a href="?page=' . $i . '">' . $i . '</a>';
        }
    }
    // 下一页链接
    if ($current_page < $total_pages) {
        $pagination .= '<a href="?page=' . ($current_page + 1) . '">下一页</a>';
    }
    $pagination .= '</div>';
}

显示分页数据和导航

将查询到的数据和分页导航链接显示在页面上。

php 实现分页查询

foreach ($results as $row) {
    echo '<div>' . htmlspecialchars($row['column_name']) . '</div>';
}
echo $pagination;

使用预处理语句防止 SQL 注入

在分页查询中使用预处理语句和参数绑定,确保安全性。

$stmt = $db->prepare("SELECT * FROM table_name LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', $items_per_page, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();

使用 Bootstrap 分页样式

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

$pagination = '';
if ($total_pages > 1) {
    $pagination .= '<nav aria-label="Page navigation"><ul class="pagination">';
    // 上一页
    if ($current_page > 1) {
        $pagination .= '<li class="page-item"><a class="page-link" href="?page=' . ($current_page - 1) . '">Previous</a></li>';
    }
    // 页码
    for ($i = 1; $i <= $total_pages; $i++) {
        $active = ($i == $current_page) ? ' active' : '';
        $pagination .= '<li class="page-item' . $active . '"><a class="page-link" href="?page=' . $i . '">' . $i . '</a></li>';
    }
    // 下一页
    if ($current_page < $total_pages) {
        $pagination .= '<li class="page-item"><a class="page-link" href="?page=' . ($current_page + 1) . '">Next</a></li>';
    }
    $pagination .= '</ul></nav>';
}

优化查询性能

对于大数据表,使用索引优化分页查询性能,避免使用 OFFSET 导致性能问题。

// 使用 WHERE 子句替代 OFFSET(适用于有序数据)
$stmt = $db->prepare("SELECT * FROM table_name WHERE id > :last_id ORDER BY id LIMIT :limit");
$stmt->bindValue(':last_id', $last_id, PDO::PARAM_INT);
$stmt->bindValue(':limit', $items_per_page, PDO::PARAM_INT);
$stmt->execute();

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

相关文章

vue router实现分页

vue router实现分页

Vue Router 实现分页的方法 在 Vue.js 中,可以通过 Vue Router 实现分页功能,通常需要结合路由参数和动态路由匹配。以下是几种常见的实现方式: 使用查询参数实现分页 在路…

vue elementui实现分页

vue elementui实现分页

使用 Element UI 实现 Vue 分页功能 Element UI 提供了 el-pagination 组件,可以方便地实现分页功能。以下是具体实现步骤: 安装 Element UI 确保项…

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…