PHP 如何分页
很多做网站的朋友,都遇到过内容多到“装不下”的情况——比如博客发了100篇文章,电商店有上千件商品,要是把所有内容都堆在一个页面里,不仅加载慢,用户翻页也会晕。这时候,分页就是最实用的解决方案,而PHP作为网站开发里常用的工具,实现分页其实没那么复杂,今天就用生活化的例子,把它讲明白。
先搞懂:分页的核心是啥?
你可以把分页比作去书店找书:书店的书架一次只摆20本书,你想看第21本,就得去下一组书架。对应到网站里,“所有内容”就是书店的库存,“一组书架的容量”就是每页要显示的内容数量,“第几组书架”就是用户点的页码。

所以,PHP分页的核心,其实是两步:第一步,先从数据库里“精准取出某一组的内容”,第二步,算出页码、总页数这些给用户看的信息。
第一步:先准备好“内容仓库”(数据库)
大部分网站的内容都是存在数据库里的,比如商品、文章,举个常见的例子,我们有一张存商品的表叫goods,里面有100件商品,ID从1到100。
要取某一页的内容,得给数据库说清楚“跳过多少个,取几个”:比如每页显示10件商品,第1页就是从第0个开始,取10个(ID1-10);第2页跳过前10个,从第10个开始,取10个(ID11-20)。
这个规则用PHP和MySQL写出来很简单,核心代码是这样的(不用怕,都是大白话):
`php
// 先定好每页显示的数量,比如10件
$pageSize = 10;
// 拿到用户点的页码,默认第1页,如果用户没点就用1
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 算要跳过的数量:(当前页-1)×每页数量
$offset = ($currentPage - 1) * $pageSize;
// 去数据库取对应的数据,LIMIT后面跟两个数:跳过多少,取多少
$pdo = new PDO('mysql:host=localhost;dbname=你的数据库名', '用户名', '密码');
$sql = "SELECT * FROM goods LIMIT $offset, $pageSize";
$goodsList = $pdo->query($sql)->fetchAll();
`
这个逻辑就像你去书店,店员问你“要第几组,每组几本”,然后直接给你对应位置的书,不用翻遍所有库存。
第二步:给用户做“导航菜单”(页码按钮)
光取内容还不够,用户得知道自己在哪、能点哪一页。这时候要算两个关键数字:总内容数、总页数。
还是用刚才的商品表,先查总共有多少件商品:
`php
// 查总商品数
$totalSql = "SELECT COUNT(*) FROM goods";
$totalCount = $pdo->query($totalSql)->fetchColumn();
// 算总页数,哪怕剩1件也要算1页,用ceil(向上取整)
$totalPage = ceil($totalCount / $pageSize);
`
有了这些,就能做分页按钮了,比如总共有100件商品,每页10件,总页数就是10。给用户的按钮不用做太复杂,只要有“上一页”“下一页”,还有中间的页码就行,比如:
如果当前是第1页,就隐藏“上一页”;如果是第10页,隐藏“下一页”;中间的页码只要显示5个左右,比如第1页就显示1、2、3、4、5,第6页就显示4、5、6、7、8,避免按钮太多挤在一起。
举个实际用的例子,按钮的HTML大概是这样(结合PHP输出):
`html
<div class="pagination">
<?php if($currentPage > 1): ?>