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 页”等功能。

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

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/480635.html

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

相关推荐

  • IIS7绑定多个域名有哪些方法?,怎么设置

    IIS7绑定多个域名的核心方法就两种:单一站点添加多个域名绑定,或者每个站点单独绑定一个域名,操作路径都在IIS管理器右侧的“绑定”功能里,多数情况下,个人站长和企业运维选第一种,几分钟就能搞定,绑定前先搞懂IIS7的域名绑定逻辑IIS7和更早的IIS6相比,绑定域名的界面更直观,但底层逻辑没变,一个网站要能被……

    2026年8月21日
    200
  • 分布式数据存储的最佳方案在哪里,有哪些推荐?

    分布式数据存储在哪里?核心答案是:数据被分散存放在多个独立物理节点上,这些节点通过软件定义组成统一存储池,节点可以分布在同一机柜、不同楼层甚至跨数据中心,你问“数据到底存在哪台机器上”,其实没有固定答案——分布式存储的精髓就是让数据在多个位置间动态分布,既保证高可用,又隐藏了具体路径,分布式存储数据放在哪里:节……

    2026年7月27日
    900
  • 如何申请服务器公网IP?云服务器公网IP申请流程

    服务器公网IP申请的核心在于通过正规云服务商或IDC机房获取独立IP,这不仅是网络连通的基础,更是保障业务安全与合规的关键步骤,在数字化时代,公网IP早已不再是少数技术极客的专属玩具,而是企业建站、部署应用乃至搭建私有云服务的“数字门牌号”,很多初次接触服务器的小白往往被复杂的网络术语绕晕,其实申请过程并没有想……

    2026年7月11日
    12600
  • 服务器log是什么意思?服务器日志怎么看

    服务器Log(日志)本质上是服务器记录自身运行状态、用户访问行为及系统事件的“黑匣子”文本文件,它是排查故障、分析流量和保障安全的唯一真实依据,当你在后台看到满屏滚动的代码或文字时,不要感到恐慌,这些看似杂乱无章的字符,实际上是服务器在向你“说话”,每一行Log都对应着一个具体的动作:谁来了、看了什么、是否成功……

    2026年7月10日
    6100
  • 防攻击服务真的能防御所有攻击吗,哪家最靠谱?

    选择防攻击服务的核心逻辑不是买最贵的,而是找到最适合业务场景的防护方案,并配合持续运营,防攻击服务价格为什么差距大?不少企业初次接触防攻击服务时,最直观的困惑就是价格:有的每月几百块,有的每年几十万,价格差异背后是防护层级、清洗能力和服务承诺的不同,基础防护与高级防护的区别市面上的防攻击服务通常分为两类:基础防……

    2026年7月21日
    500
  • 如何整合AI大模型工具?AI大模型工具免费推荐

    整合AI大模型工具的核心在于构建“提示词工程+工作流自动化+垂直知识库”的闭环体系,而非单一工具的简单叠加,这能显著提升企业级应用的可控性与产出质量,为什么单一模型无法满足复杂业务需求许多初学者在接触AI时,往往陷入“一个模型走天下”的误区,他们试图用同一个通用大模型去解决代码生成、文案撰写、数据分析等截然不同……

    2026年6月15日
    3310
  • iso计算机网络_注册ISO文件(Linux)

    在Linux系统中注册ISO文件本质上是将ISO镜像挂载到目录,而ISO计算机网络(OSI模型)是理解网络通信的七层框架,掌握这两者能提升网络环境下的文件管理效率,Linux挂载ISO文件命令详解在Linux环境下操作ISO文件,最常见也是最基础的需求就是挂载ISO镜像,挂载操作让系统能将ISO文件识别为一个虚……

    2026年8月21日
    500
  • 如何修改服务器管理口地址?服务器管理口地址怎么查

    修改服务器管理口地址的核心在于登录后台修改网络配置并重启服务,操作前务必确保新地址可达,否则可能导致永久失联,服务器管理口(Management Port)是运维人员的“生命线”,一旦配置失误,轻则业务中断,重则数据丢失,很多新手在初次接触华为服务器管理口地址修改时,往往因为紧张而忽略细节,本文将通过实操步骤……

    2026年7月8日
    14900
  • 服务器数据自动备份如何设置,详细步骤和注意事项有哪些?

    服务器数据自动备份并非可选功能,而是保障业务不中断的底线操作,核心在于围绕3-2-1原则选择匹配自身场景的工具与策略,并定期演练恢复流程,为什么服务器数据自动备份是刚需手动备份像“赌运气”,一旦忘了操作或硬盘恰好在那一刻损坏,数据就回不来了,自动备份则把恢复点变成固定资产:每天凌晨、每次变更后,系统自己把数据复……

    2026年7月23日
    1200
  • 非神经网络机器学习是什么?非神经网络机器学习算法有哪些

    非神经网络机器学习通过规则引擎、决策树和集成算法解决结构化数据问题,在可解释性、小样本训练和算力成本控制上显著优于深度学习,是传统企业数字化转型的首选方案,为什么非神经网络模型依然占据企业核心地位在人工智能热潮中,深度学习常被捧上神坛,但业内专家指出,绝大多数商业场景并不需要复杂的神经网络,非神经网络机器学习……

    2026年7月6日
    4000

发表回复

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