当前位置:首页 > 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中实现分页条数功能,通常需要结合分页组件和数据请求逻辑。以下是几种常见的实现方式: 使用Element UI的分页组件 Element UI提供了现成的分页组件,可以快…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现文件的下载

php实现文件的下载

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

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…