You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现数据库动态分页:每15条记录自动生成对应页面的方法

动态分页功能实现步骤

1. URL参数解析与合法性处理

  • 从请求的URL查询参数中获取pageNo的值,默认值设为1
  • 对参数做强制校验:转换为正整数,若传入值小于1、非数字格式,统一修正为1,避免无效查询
  • 固定每页展示条数为15,按公式计算查询偏移量:
    偏移量 = (当前页码 - 1) * 每页展示条数
    比如pageNo=1时偏移量为0,对应查询前15条;pageNo=2时偏移量为15,对应查询第16-30条,和你现有手写的SQL逻辑完全一致。

2. 动态生成SQL查询

将计算得到的偏移量代入查询语句,必须使用参数绑定的方式传入参数,禁止直接字符串拼接,避免SQL注入风险,示例(以PHP PDO为例,其他语言逻辑一致):

// 处理页码参数
$pageNo = isset($_GET['pageNo']) ? max(1, intval($_GET['pageNo'])) : 1;
$pageSize = 15;
$offset = ($pageNo - 1) * $pageSize;

// 预编译SQL并执行查询
$stmt = $pdo->prepare("SELECT * FROM support ORDER BY `date` DESC LIMIT ?, ?");
$stmt->execute([$offset, $pageSize]);
$currentPageRecords = $stmt->fetchAll();

3. 生成分页导航

要实现自动显示下一页的逻辑,需要先拿到总记录数计算总页数:

  • 执行总数查询语句:SELECT COUNT(*) AS total FROM support拿到工单总条数
  • 计算总页数:总页数 = CEIL(总条数 / 每页展示条数)
  • 前端渲染导航时做逻辑判断:
    • 当前页码 > 1时,显示「上一页」按钮,链接地址为?pageNo=<?= $pageNo - 1 ?>
    • 当前页码 < 总页数时,显示「下一页」按钮,链接地址为?pageNo=<?= $pageNo + 1 ?>
    • 也可以按需渲染中间的连续页码按钮,控制显示范围避免导航栏过长

4. 大数据量优化建议

如果后续工单数据量超过10万条,直接用LIMIT大偏移量的查询性能会明显下降,可以优化为基于游标分页的写法:

SELECT * FROM support 
WHERE `date` < (SELECT `date` FROM support ORDER BY `date` DESC LIMIT ?, 1)
ORDER BY `date` DESC LIMIT 15

该写法可以避免数据库扫描大量不需要的偏移记录,大幅提升大页码查询性能。


内容的提问来源于stack exchange,提问作者DirtyyyDan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:18:02