当前位置:首页 > 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 进行分页查询,获取当前页的数据。

$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>';
}

显示分页数据和导航

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

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 导致性能问题。

php 实现分页查询

// 使用 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

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

分页实现vue

分页实现vue

分页实现方法(Vue) 使用Element UI分页组件 安装Element UI库后,可以直接使用其分页组件。在模板中添加el-pagination,通过v-model绑定当前页码,设置page-s…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE ord…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…