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

相关文章

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用 Element UI 分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。需要先安装 Element UI 库。 安装 Ele…

vue  实现分页

vue 实现分页

实现分页功能 在Vue中实现分页功能通常需要结合后端API或前端数据处理。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,所有数据一次性加载到前端后进行分页处理: <tem…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

js实现分页功能代码

js实现分页功能代码

分页功能实现方法 客户端分页(前端处理数据) 适用于数据量较小且已全部加载到前端的情况。 // 示例数据 const data = Array.from({length: 100}, (_, i)…

php实现的进度条

php实现的进度条

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

php登陆功能实现

php登陆功能实现

实现PHP登录功能 数据库准备 创建一个用户表存储登录信息,基本字段包括用户名、密码(需加密)等: CREATE TABLE users ( id INT AUTO_INCREMENT PR…