PHP基于MySQL的SQL分页实现方法
分页显示涉及将数据库结果集分割为独立页面展示。核心在于确定每页记录数($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表格或列表。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









