说明:
沿用“PHP PDO 数据查询、删除实例”(http://hanyufeng.php.cn/blog/detail/2180)的代码,实现了分页显示。
运行效果:

要点:
分页记录起始位置的计算
分页数的计算
无分页参数或为0时的处理
上一页、下一页为首页、尾页时的处理
示例源码:
<?php
$pageTitle = '用户信息列表';
include 'inc/header.php';
//连接数据库
require 'inc/connect.php';
$page = $_GET['page'];
$page = ($page == 0 ) ? 1 : $page;//处理无page参数或为0的情况
//参数初始化
$totalNum = 0;//记录总数
$pageNum = 10;//设定每页数量
$pageCount = 0;//分页总数
$offset = $pageNum * ($page-1);//startIndex
//查询用户信息表user
$sql = "SELECT `id`,`name`,`email` FROM user limit $offset,$pageNum"; //创建查询语句
$rows = []; //创建查询结果容器,初始为空数组,该数组最终会成为一个二维数组,与数组表对应
try
{
$pdo_stmt = $pdo->query($sql);//查询
if ($pdo_stmt->rowCount() > 0) {//如果数据不为空
$i =0;
while ($row = $pdo_stmt->fetch()) { //从结果集的第一条记录开始抓取数据到绑定的变量中
//继续沿用$rows数组保存数据,以便重复使用输出数据到页面的代码
$rows[$i] = ['id'=>$row['id'],'name'=>$row['name'],'email'=>$row['email']];
$i++;
}
}
else
{
echo '<p style="color:red">当前表中没有数据~~</p>';
}
} catch (PDOException $e) {
echo '<p>查询失败:'.$e->getMessage().'</p>';
}
?>
<!--创建表格用来展示用户数据-->
<!--<div class="container">-->
<div class="row">
<div class="col-md-12 text-center">
<h3>用户信息表</h3>
<table class="table table-bordered">
<tr class="h5 bg-info">
<!-- <td>ID</td><td>姓名</td><td>邮箱</td>-->
<td>ID</td><td>姓名</td><td>邮箱</td><td>操作</td>
</tr>
<!--
1.下面循环输出用户信息,用foreach()的替代语法,请尽快熟悉这种写法,以后写模板就靠这个玩意了
2. 替代语法的目标就是一个: 干掉php代码中的大括号,因为html与php混写的时候,不断的切换会有很多大括号
3. 过多的大括号,即不利于代码整洁,也容易出错,不利于代码维护
-->
<?php foreach ($rows as $row) : ?>
<tr>
<td><?php echo $row['id'] ?></td>
<td><?php echo $row['name'] ?></td>
<td><?php echo $row['email'] ?></td>
<!-- 添加编辑和删除操作时,用链接式的按钮更合适-->
<td>
<a class="btn btn-success" href="view.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">详细</a>
<a class="btn btn-primary" href="edit.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">编辑</a>
<a id="delete" class="btn btn-danger" href="delete.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">删除</a>
</td>
</tr>
<?php endforeach;?>
</table>
</div>
</div>
<!--</div>-->
<nav aria-label="Page navigation" class="text-center">
<ul class="pagination">
<?php
$sql = "SELECT count(*) as total FROM user";
$pdo_stmt = $pdo->query($sql);//查询
//获取总数
$totalNum = $pdo_stmt->fetch()['total'];
$pageCount = ceil($totalNum/$pageNum);//进一法取整
if($pageCount >1){ //>1 才开始分页
echo '<li>
<a href="?page='.($page==1?1:$page-1).'" aria-label="Previous">
<span aria-hidden="true">«</span>
</a></li>';
for($i=1; $i<=$pageCount; $i++){
if($page == $i){
echo '<li class="active"><a href="?page='.$i.'">'.$i.'</a></li>';
} else{
echo '<li><a href="?page='.$i.'">'.$i.'</a></li>';
}
}
//尾页
// echo '<li><a href="#">'.$pageCount.'</a></li>';
echo '<li>
<a href="?page='.($page==$pageCount?$pageCount:$page+1).'" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>';
}
?>
</ul>
</nav>
<div class="row">
<div class="col-md-12 text-right">
<a class="btn btn-info btn-lg" href="register.php" role="button">新建</a>
<p></p>
</div>
</div>
<!--输出页尾-->
<?php include 'inc/footer.php' ?>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号