PHP基于MySQL的SQL分页实现方法

陆景行
陆景行
发布时间:2026-10-13| 3人浏览过
原创

分页显示涉及将数据库结果集分割为独立页面展示。核心在于确定每页记录数($PageSize)与当前页码($CurrentPageID),利用MySQL的LIMIT子句配合偏移量算法精准截取数据片段。

分页原理与核心参数

实现分页需确立两个初始条件:单页显示的最大记录数($PageSize)以及用户当前访问的页码($CurrentPageID)。在此基础上,可推导出辅助参数:

  • 上一页/下一页页码:根据当前页码加减1得出。
  • 总页数($numPages):由总记录数除以单页记录数向上取整计算而来。

MySQL数据库操作逻辑

在MySQL中,截取自定区间数据通常使用 LIMIT offset, rows 语法。其规律如下:

  • 前10条记录:SELECT * FROM table LIMIT 0, 10
  • 第11-20条记录:SELECT * FROM table LIMIT 10, 10
  • 第21-30条记录:SELECT * FROM table LIMIT 20, 10

通用模板公式为:
SELECT * FROM table LIMIT ($CurrentPageID - 1) * $PageSize, $PageSize

例如当单页显示10条时,当前为第5页,则偏移量为 $(5-1)*10 = 40$,即获取从第41条开始的10条数据。

PHP完整实现步骤

第1步:建立连接并安全校验页码

首先连接数据库并验证请求参数。注意**:原文使用了已废弃且存在严重SQL注入风险的 `mysql_*` 函数,实际生产环境请务必替换为 `PDO` 或 `mysqli` 并采用预处理语句。

// 建立数据库连接 (注: mysql_* 系列函数已在 PHP 7.0+ 移除)
$link = mysql_connect("localhost", "mysql_user", "mysql_passWord") 
or die("Could not connect: " . mysql_error());

// 获取当前页数
if(isset($_GET['page'])){
$page = intval($_GET['page']);
}else{
$page = 1;
}

第2步:初始化配置

设置分页常量与总数量变量,便于后续统一修改。

// 每页显示记录数
$PageSize = 10;

// 获取表中总记录数
$sql_count = "SELECT count(*) as amount FROM table";
$result = mysql_query($sql_count);
$row = mysql_fetch_row($result);
$amount = $row[0]; // 修正了原代码中键名引用可能导致的错误

第3步:计算总页数

根据总记录数和每页数量计算理论总页数。

$page_count = 0;
if($amount > 0){
if($amount < $PageSize){
$page_count = 1;
}else{
// 有余数则+1页
if($amount % $PageSize){
$page_count = (int)($amount / $PageSize) + 1;
}else{
$page_count = $amount / $PageSize;
}
}
}

第4步:生成导航链接字符串

拼接HTML锚点文本用于前端展示。

$page_string = '';
if($page == 1){
$page_string .= '第一页|上一页|';
}else{
$page_string .= "<a href=?page=1>第一页</a>|$page >上一页|";
}

if(($page == $page_count) || ($page_count == 0)){
$page_string .= '下一页|尾页';
}else{
$page_string .= "$page >下一页||$page_count >尾页";
}

第5步:提取并返回当前页数据集

构造带分页参数的SQL查询,提取二维数组供模板渲染。

$rowset = array();
if($amount){
$sql_data = "SELECT * FROM table ORDER BY id DESC LIMIT ". (($page-1)*$PageSize) .", $PageSize";
$result = mysql_query($sql_data);
while($row = mysql_fetch_row($result)){
$rowset[] = $row;
}
}

未包含具体渲染代码,开发者可通过遍历 `$rowset` 数组输出至HTML表格或列表。

相关标签:

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

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 算法库。