php分页插件怎么选?php分页插件代码示例

在 PHP 中实现分页功能通常涉及两个主要部分:

  1. 后端逻辑:计算总页数、当前页、每页条数,并从数据库中获取对应页的数据。
  2. 前端展示:生成分页导航链接(如“上一页”、“1”、“2”、“3”、“下一页”)。

下面是一个完整、简洁、可复用的 PHP 分页类示例,适用于 MySQL 数据库(使用 PDO 或 mysqli 均可,这里以 PDO 为例)。

PHP增删改查、登录注册,上传图片,分页。
加载中
PHP增删改查、登录注册,上传图片,分页。

✅ 分页类:Paginator.php

<?php
class Paginator {
    private $totalItems;   // 总记录数
    private $itemsPerPage; // 每页显示条数
    private $currentPage;  // 当前页码
    private $totalPages;   // 总页数
    public function __construct($totalItems, $itemsPerPage = 10, $currentPage = 1) {
        $this->totalItems = (int)$totalItems;
        $this->itemsPerPage = (int)$itemsPerPage;
        $this->currentPage = max(1, (int)$currentPage); // 防止小于1
        $this->totalPages = ceil($this->totalItems / $this->itemsPerPage);
        // 防止页码超出范围
        if ($this->currentPage > $this->totalPages) {
            $this->currentPage = $this->totalPages;
        }
    }
    // 获取偏移量,用于 SQL LIMIT
    public function getOffset() {
        return ($this->currentPage - 1)  $this->itemsPerPage;
    }
    // 获取当前页
    public function getCurrentPage() 

php分页插件怎么选?php分页插件代码示例

{ return $this->currentPage; } // 获取总页数 public function getTotalPages() { return $this->totalPages; } // 是否有上一页 public function hasPrevPage() { return $this->currentPage > 1; } // 是否有下一页 public function hasNextPage() { return $this->currentPage < $this->totalPages; } // 生成分页 HTML public function render($baseUrl = '?page=') { if ($this->totalPages <= 1) { return ''; } $html = '<div class="pagination">'; // 上一页 if ($this->hasPrevPage()) { $html .= "<a href='{$baseUrl}{$this->currentPage - 1}' class='page-link'>« 上一页</a> "; } else { $html .= '<span class="page-link disabled">« 上一页</span> '; } // 页码按钮(简化版:只显示当前页前后2页) $start = max(1, $this->currentPage - 2); $end = min($this->totalPages, $this->currentPage + 2); for ($i = $start; $i <= $end; $i++) { if ($i == $this->currentPage) { $html .= "<span class='page-link active'>{$i}</span> "; } else { $html .= "<a href='{$baseUrl}{$i}' class='page-link'>{$i}</a> "; } } // 下一页

php分页插件怎么选?php分页插件代码示例

if ($this->hasNextPage()) { $html .= "<a href='{$baseUrl}{$this->currentPage + 1}' class='page-link'>下一页 »</a>"; } else { $html .= '<span class="page-link disabled">下一页 »</span>'; } $html .= '</div>'; return $html; } }

✅ 使用示例

假设你有一个 users 表,每页显示 10 条数据:

<?php
require_once 'Paginator.php';
// 1. 获取当前页码(默认第1页)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 2. 每页显示条数
$itemsPerPage = 10;
// 3. 连接数据库(PDO 示例)
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 4. 获取总记录数
$stmt = $pdo->query("SELECT COUNT() FROM users");
$totalItems = (int)$stmt->fetchColumn();
// 5. 创建分页器实例
$paginator = new Paginator($totalItems, $itemsPerPage, $page);
// 6. 获取当前页数据
$offset = $paginator->getOffset();
$stmt = $pdo->prepare("SELECT  FROM users LIMIT :limit OFFSET :offset");
$stmt->bindValue(':limit', $itemsPerPage, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 7. 显示数据
echo "<ul>";
foreach ($users as $user) {
    echo "<li>{$user['name']}</li>";
}
echo "</ul>";
// 8. 显示分页导航
echo $paginator->render('?page=');
?>

php分页插件怎么选?php分页插件代码示例


✅ 可选:添加 CSS 样式(美化分页)

.pagination {
    margin: 20px 0;
}
.page-link {
    padding: 8px 12px;
    margin: 0 2px;
    text-decoration: none;
    color: #007bff;
    border: 1px solid #dee2e6;
    border-radius: 4px;
}
.page-link:hover {
    background-color: #e9ecef;
}
.page-link.active {
    background-color: #007bff;
    color: white;
    border-color: #007bff;
}
.page-link.disabled {
    color: #6c757d;
    pointer-events: none;
}

✅ 优点

  • 面向对象,易于复用
  • 自动处理边界情况(如页码超出、无数据等)
  • 支持自定义每页条数
  • 生成语义化 HTML,便于样式定制

✅ 注意事项

  • 确保 $totalItems$itemsPerPage 是整数,避免 SQL 注入或逻辑错误。
  • 如果数据量极大(如百万级),建议考虑使用游标分页(Cursor-based Pagination)而非传统偏移分页。
  • 可根据需求扩展:如显示“共 X 页”、“跳转到第 Y 页”等功能。

如需支持 MySQLiThinkPHP/Laravel 等框架的分页,也可以告诉我,我可以提供对应版本的实现。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/480635.html

(0)
Python付费课程值得买吗?python学习资源推荐
上一篇 2026年7月10日 15:12
分享wifi密码怎么设置?手机连不上wifi密码忘了怎么办
下一篇 2026年7月10日 15:13

相关推荐

  • 房间预订网站模板怎么制作?酒店预订系统源码下载

    选择房间预订网站模板时,核心在于平衡定制化需求与开发成本,建议优先采用响应式架构并集成主流支付接口,以确保移动端体验和交易安全,在2026年的数字营销环境中,一个高效的预订系统不再仅仅是展示房源的工具,而是直接驱动营收的核心引擎,对于酒店经营者、民宿房东或小型旅行社而言,搭建专属预订平台往往面临技术门槛高、维护……

    AI资讯 2026年7月6日
    17010
  • 服务器维护到底要多少钱?服务器维护费用包含哪些

    服务器维护费用并非固定值,通常在每月几百元到上万元不等,具体取决于服务器配置、维护深度及服务商的技术等级,很多站长或企业IT负责人在初次接触服务器时,往往会被“维护”这个概念绕晕,大家常以为买了服务器就是买断了服务,其实不然,服务器就像一辆豪车,买回来只是有了驾驶权,后续的保养、加油、修车、保险,每一样都要真金……

    2026年7月6日
    20000
  • 服务器托管哪里好?,服务器托管费用多少钱

    服务器托管首选一线城市核心机房,重点考察BGP多线接入、电力冗余及物理安防,2026年市场共识认为“高可用+低延迟”是选型核心,选择服务器托管地点并非简单的地理位置对比,而是对网络质量、运维成本和业务稳定性的综合权衡,随着云计算技术的普及,许多企业误以为本地机房已无必要,但对于高并发、低延迟要求的业务,物理服务……

    2026年7月6日
    19800
  • 服务器和客户端为何不断连接?

    服务器和客户端不断交互是Web应用运行的基石,其核心在于通过HTTP/HTTPS协议在请求与响应之间建立高效、安全的数据通道,任何一方的延迟或故障都会直接导致用户体验下降,理解服务器与客户端的持续对话机制想象一下,你正在一家繁忙的餐厅用餐,你就是“客户端”,负责发出点单指令;而厨房里的厨师团队就是“服务器”,负……

    2026年7月3日
    900
  • 服务器如何修改客户端用户?修改后如何重新连接

    服务器修改客户端用户的核心逻辑在于通过后端接口验证身份后,更新数据库中的用户状态或权限字段,并同步至前端会话,而非直接篡改客户端本地数据,在分布式系统架构中,服务端与客户端的关系如同大脑与四肢,大脑(服务器)拥有最终决策权,而四肢(客户端)仅负责执行和展示,许多开发者容易陷入误区,认为修改用户信息就是直接改前端……

    2026年7月4日
    9200
  • 信息安全AI大模型能做什么?如何构建企业级AI大模型

    信息安全AI大模型的核心价值在于将被动防御转化为主动智能预测,通过自动化威胁狩猎和代码审计,显著降低企业的安全运营成本并提升响应速度,为什么传统安全工具正在失效?过去十年,企业依赖防火墙、入侵检测系统(IDS)和静态规则库构建防线,这种“墙式”思维在面对新型攻击时显得捉襟见肘,攻击者利用自动化脚本和AI辅助工具……

    2026年6月14日
    2100
  • 大模型全参数微调FT完整教程

    大模型全参数微调(Full Fine-Tuning)并非简单的代码运行,而是通过消耗大量算力资源,让模型彻底重写内部权重以适应特定垂直领域任务的最彻底方案,适合拥有充足GPU资源且对领域专业性要求极高的场景,在人工智能落地应用的深水区,许多开发者容易陷入一个误区:认为微调就是给模型“喂”几本行业手册,全参数微调……

    2026年6月17日
    2400
  • AI大模型里的小模型是什么?大模型和小模型的区别

    AI大模型里的“小模型”并非技术降级,而是通过参数剪枝、知识蒸馏等手段,在保持核心能力的前提下,实现更低成本、更高效率的垂直场景落地方案,很多人对人工智能的理解还停留在“越大越好”的阶段,认为参数量几十万亿的巨型模型才是未来,但在2026年的实际业务场景中,这种认知已经过时,真正的技术趋势是“大小搭配”,大模型……

    2026年6月15日
    2310
  • 国内AI大模型区别在哪?哪家大模型更适合企业使用

    2026年国内AI大模型的核心区别在于:百度文心一言胜在搜索与生态整合,阿里通义千问强在代码与长文本处理,腾讯混元依托微信生态擅长内容创作,而智谱清言则在垂直领域专业度上表现突出,选择大模型不再是盲目跟风,而是基于具体业务场景的精准匹配,随着技术迭代进入深水区,各家模型的能力边界日益清晰,对于企业用户和个人创作……

    2026年6月13日
    7200
  • 为什么过滤器效果不好?家用净水器过滤器怎么选

    在2026年的内容生态中,”filtered”代表的不仅是技术层面的过滤,更是信息降噪与精准匹配的核心能力,它通过算法筛选出高价值内容,直接决定了用户能否在海量数据中快速获取有效信息,为什么2026年的搜索更依赖过滤机制过去的搜索逻辑是”关键词匹配”,用户输入词,系统返回包含该词的所有页面,这种模式在信息匮乏时……

    2026年7月8日
    16000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注