当前位置:首页 > PHP

php 分页怎么实现

2026-02-13 23:15:00PHP

基本分页实现

使用 LIMITOFFSET 实现数据库分页查询。假设每页显示 10 条记录,当前页码为 $page

$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;

$sql = "SELECT * FROM articles LIMIT $offset, $perPage";
$result = $pdo->query($sql);

计算总页数

需要先查询总记录数以计算总页数:

$totalQuery = "SELECT COUNT(*) as total FROM articles";
$totalResult = $pdo->query($totalQuery)->fetch();
$totalPages = ceil($totalResult['total'] / $perPage);

生成分页链接

创建简单的分页导航链接:

for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}

使用预编译语句(安全版)

防止 SQL 注入的安全实现方式:

php 分页怎么实现

$stmt = $pdo->prepare("SELECT * FROM articles LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();

分页类封装

可以封装一个简单的分页类:

class Paginator {
    private $perPage;
    private $page;
    private $total;

    public function __construct($perPage = 10) {
        $this->perPage = $perPage;
        $this->page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    }

    public function getLimit() {
        return [($this->page - 1) * $this->perPage, $this->perPage];
    }

    public function setTotal($total) {
        $this->total = $total;
    }

    public function getLinks() {
        $totalPages = ceil($this->total / $this->perPage);
        $links = [];
        for ($i = 1; $i <= $totalPages; $i++) {
            $links[] = [
                'page' => $i,
                'current' => $i === $this->page
            ];
        }
        return $links;
    }
}

现代框架的分页实现

Laravel 等框架内置分页功能:

php 分页怎么实现

// Laravel 示例
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);

// 视图中直接使用
{{ $users->links() }}

前端分页注意事项

对于大量数据考虑实现前端分页或无限滚动,减少服务器压力:

// 前端分页示例
function fetchPage(page) {
    fetch(`/api/data?page=${page}`)
        .then(response => response.json())
        .then(data => renderData(data));
}

性能优化建议

对于大数据表分页,避免使用 OFFSET,改用基于 ID 的分页:

$lastId = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$sql = "SELECT * FROM articles WHERE id > $lastId ORDER BY id LIMIT $perPage";

分页样式美化

使用 Bootstrap 等 CSS 框架美化分页:

<nav aria-label="Page navigation">
    <ul class="pagination">
        <?php foreach ($paginator->getLinks() as $link): ?>
            <li class="page-item <?= $link['current'] ? 'active' : '' ?>">
                <a class="page-link" href="?page=<?= $link['page'] ?>">
                    <?= $link['page'] ?>
                </a>
            </li>
        <?php endforeach ?>
    </ul>
</nav>

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

相关文章

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

php实现验证码的识别

php实现验证码的识别

验证码识别的基本方法 验证码识别通常分为手动实现和第三方工具两种方式。手动实现需要图像处理和机器学习知识,而第三方工具则更快捷。 使用Tesseract OCR识别验证码 Tesseract是一个开…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

vue 实现数据分页

vue 实现数据分页

实现数据分页的基本思路 在Vue中实现数据分页通常需要结合前端分页逻辑和后端API支持。前端分页适合数据量较小的情况,后端分页适合大数据量场景。 前端分页实现 创建一个计算属性来分割当前页数据:…

vue怎样实现分页

vue怎样实现分页

Vue实现分页的方法 使用第三方库(如Element UI或Ant Design Vue) Element UI的Pagination组件可以直接集成到Vue项目中。安装Element UI后,在组件…