PHP传统分页原理与实现代码解析

小满
小满
发布时间:2026-10-15| 4人浏览过
原创

本文详细解析了PHP基于MySQL数据库的传统分页实现原理,涵盖参数设置、SQL查询、分页计算及链接生成的完整流程。

结果或目标

本教程旨在展示如何使用原生 PHP 和 MySQL 实现一个简单的网页分页功能。核心目标是将大量数据库记录按固定数量(如每页5条)拆分显示,并提供第一页、上一页、下一页和最后一页的导航链接,以优化用户浏览体验并减少单次查询的数据量。

准备条件

  • 开发环境:已安装并运行的 Web 服务器(如 Apache/Nginx)及 PHP 环境。
  • 数据库:一个包含数据的 MySQL 数据库,示例中表名为 message,包含字段 id 和 title。
  • 连接文件:需要准备一个数据库连接配置文件(如 ../inc/conn.php),确保能正常建立数据库连接。

真实操作顺序

第1步:获取并初始化分页参数

目的:确定用户请求的是哪一页,并设置每页显示的记录条数。

动作:

  1. 设置每页显示数量变量 $pagesize,例如设为 5。
  2. 初始化默认页码变量 $pagenum,通常设为 1。
  3. 检查 URL 中的 $_GET['pagenum'] 参数。如果存在且不为空,则将 $pagenum 更新为用户指定的页码;否则保持默认值。

第2步:根据当前页码截取数据显示

目的:只获取当前页需要展示的数据库记录,避免加载全部数据导致性能下降。

入口:构建 SQL 查询语句。

动作:

  1. 计算 SQL 中 LIMIT 的起始位置:公式为 (当前页 - 1) * 每页数量,即 ($pagenum - 1) * $pagesize。
  2. 执行查询:SELECT * FROM message LIMIT {起始位置}, {每页数量}。
  3. 遍历返回的结果集 $result,逐行输出数据内容(如标题)。
// 示例 SQL 构造逻辑
$sql = "Select * From message limit " . ($pagenum - 1) * $pagesize . ",$pagesize";
$result = mysql_query($sql);
while(($row=mysql_fetch_array($result))==true){
    echo '<hr>' . $row["title"] . '</hr>';
}

第3步:获取总记录数以计算分页数

目的:确定数据库中一共有多少条数据,从而计算出总共需要分为多少页。

动作:

  1. 执行统计查询:SELECT id FROM message(仅选取主键或其他非空字段即可)。
  2. 使用 mysql_num_rows() 函数获取结果集中的行数,赋值给 $rownum。

第4步:计算总页数

目的:根据总记录数和每页显示数量,得出最终的页数上限。

动作:

  • 判断 $rownum % $pagesize 是否等于 0。
  • 若余数为 0(整除),则总页数 $pagecount = $rownum / $pagesize。
  • 若有余数,说明最后一页未满,需进位:$pagecount = (int)($rownum / $pagesize) + 1。注:原逻辑中使用强制转换可能遗漏余数情况下的进位处理,实际应用中建议增加对余数的判断或直接使用 ceil() 函数向上取整。

第5步:获取当前页面的基础 URL

目的:生成分页链接时保留当前的页面路径,仅修改页码参数。

动作:

  1. 通过 $_SERVER["REQUEST_URI"] 获取完整的请求 URI。
  2. 使用 parse_url() 解析 URI,提取其中的路径部分 path。
$url = $_SERVER["REQUEST_URI"];
$url = parse_url($url);
$url = $url["path"];

第6步:生成交互式分页链接

目的:在前端展示导航按钮,允许用户切换页面。

动作:

  • 上一页逻辑:如果当前是第 1 页,禁用“第一页”和“上一页”链接(显示为纯文本);否则,生成带 ?pagenum=... 参数的超链接。
  • 下一页逻辑:如果当前页等于总页数,禁用“下一页”和“最后一页”链接;否则,生成对应页码的超链接。

完成判断

当页面成功加载后,应能看到以下状态:
1. 正确显示了指定数量的数据条目。
2. 底部或顶部出现了清晰的导航栏,包含“第一页”、“上一页”、“下一页”、“最后一页”。
3. 点击不同页码链接后,URL 中的 pagenum 参数正确变化,且页面内容随之更新,无重复或缺失数据。

原文有依据的排错

  • SQL注入风险:示例代码直接将 $_GET 传入 SQL 语句,存在严重的安全隐患。在实际项目中,必须对输入参数进行类型转换(如 intval())或使用预处理语句(Prepared Statements)。
  • 弃用函数警告:代码中使用的 mysql_* 系列函数已在较新的 PHP 版本中移除。建议使用 mysqli_* 或 PDO 扩展替代,以保证代码的兼容性和安全性。
  • 分页边界计算:原代码中计算总页数的逻辑 ((int)($rownum/$pagesize)) 在未处理余数时可能导致最后一页丢失。应确保当 $rownum % $pagesize != 0 时,总页数加 1。

简要总结

PHP 分页的核心在于 LIMIT offset, count 的使用。通过控制 offset(偏移量)来定位当前页的起始记录,结合总记录数动态计算总页数,再辅以 URL 参数传递页码信息,即可实现完整的分页交互。虽然原生实现较为繁琐,但理解其原理有助于深入掌握数据库交互与 Web 开发的基础逻辑。

以上就是 PHP 简单的分页过程与原理的详细内容,更多关于 PHP 分页技术、MySQL 查询优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。