PHP分页需用SQL的LIMIT/OFFSET控制数据量,结合SQL_CALC_FOUND_ROWS获总数,或用游标分页提升大数据性能,Laravel则通过paginate()和links()方法简化实现。

如果您在PHP中需要从数据库中获取大量数据并分页显示,则必须通过SQL查询限制每次返回的记录数量,并计算当前页的起始偏移量。以下是实现此功能的具体步骤:
一、使用LIMIT和OFFSET进行分页查询
MySQL支持LIMIT子句,配合OFFSET可精确控制每页返回的数据范围。该方式直接在SQL层面完成分页,效率高且逻辑清晰。
1、确定每页显示记录数(例如每页10条)和当前页码(例如第3页)。
2、计算OFFSET值:OFFSET = (当前页码 - 1) × 每页记录数。
立即学习“PHP免费学习笔记(深入)”;
3、编写SQL语句:SELECT * FROM table_name ORDER BY id DESC LIMIT 10 OFFSET 20。
4、使用PDO或mysqli执行该SQL,获取当前页数据。
二、使用SQL_CALC_FOUND_ROWS获取总记录数
在不重复执行COUNT查询的前提下,可通过SQL_CALC_FOUND_ROWS与FOUND_ROWS()配合,一次性获得分页数据及总条数。
1、执行带SQL_CALC_FOUND_ROWS的查询:SELECT SQL_CALC_FOUND_ROWS * FROM table_name LIMIT 10 OFFSET 0。
2、紧接着执行SELECT FOUND_ROWS()获取总记录数。
3、将FOUND_ROWS()结果用于计算总页数:总页数 = ceil(总记录数 / 每页条数)。
三、基于游标分页(Cursor-based Pagination)
适用于大数据量、高并发场景,避免OFFSET随页码增大导致性能下降。依赖有序字段(如自增ID或时间戳)定位下一页起始位置。
1、首次请求不带游标参数,按时间倒序取前N条:SELECT * FROM posts ORDER BY created_at DESC LIMIT 10。
启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。
2、记录最后一条记录的created_at值(如'2024-05-01 10:30:00')作为下一页游标。
3、下一页请求使用WHERE条件:SELECT * FROM posts WHERE created_at 。
四、封装为可复用的分页类
将分页逻辑抽象为独立类,便于在多个模块中调用,统一处理页码校验、SQL拼接与结果组装。
1、定义类属性包括$pdo、$table、$perPage、$currentPage。
2、构造函数中自动校验并标准化$currentPage值:if ($currentPage 。
3、提供getItems()方法返回当前页数据数组,getTotal()方法返回总记录数。
4、提供getPaginationHtml()方法生成HTML格式的页码导航链接。
五、使用Laravel Eloquent内置分页器
若项目基于Laravel框架,可直接调用Eloquent模型的paginate()方法,底层自动处理OFFSET、COUNT及分页元信息。
1、在控制器中调用:$users = User::where('status', 1)->paginate(15)。
2、在视图中遍历数据:@foreach ($users as $user) ... @endforeach。
3、渲染分页控件:{{ $users->links() }},自动输出Bootstrap兼容的页码HTML。










