一问答:分页查询的原理与偏移量的计算方法
分页功能的开发流程:
1-连接数据库
2-读取数据库数据
3-生成LIMIT语句获取分页数据
4-使用分页SQL语句获取数据
5-显示获取的数据
6-获取总记录数用于页数及算偏移量
7-对翻页以及页码进行处理
偏移量的计算方法= (当前页码 -1) * 每页显示的数量
<?php
//连接数据库(添加判断是否连接成功)
try {
$pdo=new PDO('mysql:host=127.0.0.1;dbname=php','root','root');
}catch (PDOException $ex)
{
die($ex->getMessage());
}
//取得每页数量
$num=8;
//获取总记录数
$sql="SELECT COUNT(*) FROM sys_user;";
$stmt=$pdo->prepare($sql);
$stmt->execute();
$totalRecord=$stmt->fetchColumn(PDO::ATTR_AUTOCOMMIT);
//当前页数(使用三元运算符判断当前页URL是否存在p=?,如果存在则获取,如果不存在设置1)
$currentPage=isset($_GET['p'])?$_GET['p']:1;
//设置偏移值:(当前页数-1)*每页数量$num
$offset=($currentPage-1)*$num;
//取得总页数(使用ceil进一取整)
$totalPages=ceil($totalRecord/$num);
//获取数据
$sql="SELECT * FROM sys_user LIMIT {$offset},{$num};";
$stmt=$pdo->prepare($sql);
$stmt->execute();
$data=$stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>分页实现</title>
<style>
table{
width: 70%;
margin: 30px auto; /*外边框上下30,左右自动*/
text-align: center; /*文本居中*/
border-collapse: collapse;
}
table caption{
font-family: 微软雅黑;
font-size:1.5rem;
font-weight: bold;
margin-bottom: 20px;
}
table tr td,table tr th,span,option,select,button{
font-family: 微软雅黑;
font-size: 1rem;
}
a{
text-decoration-line: none;
}
table th{
background-color: #4cae4c;
color: #fff;
}
table,tr,td{
border: 1px solid #4cae4c;
height: 40px;
}
table tr th{
border: 1px solid #75ae87;
height: 40px;
}
.page{
text-align: center;
}
.page-class{
display: inline-block;
}
div a{
/*margin-left: 0px;*/
/*background-color: #5cb85c;*/
color: #5f677e;
display: inline-block;
border: 1px solid #5f677e;
min-width: 23px;
}
div a:hover{
background-color: #317ef3;
color: #ffffff;
border: 1px solid #317ef3;
}
button:hover{
background-color: #317ef3;
color: #ffffff;
/*border: 1px solid #317ef3;*/
}
.active{
background-color: #317ef3;
color: #fff;
}
</style>
</head>
<body>
<table>
<caption>用户信息表</caption>
<tr>
<th>Id</th>
<th>用户</th>
<th>名称</th>
<th>班次</th>
<th>性别</th>
<th>生日</th>
<th>年龄</th>
<th>照片</th>
<th>电话</th>
<th>地址</th>
<th>卡号</th>
<th>邮箱</th>
<th>QQ</th>
<th>部门</th>
<th>区域</th>
<th>微信</th>
</tr>
<?php foreach ($data as $row): ?>
<tr>
<td><?php echo $row['Id'];?></td>
<td><?php echo $row['User']; ?></td>
<td><?php echo $row['Name']; ?></td>
<td><?php echo $row['TypeClass'];?></td>
<td><?php echo $row['Gender'];?></td>
<td><?php echo $row['Birthday'];?></td>
<td><?php echo $row['Age'];?></td>
<td><?php echo $row['Image'];?></td>
<td><?php echo $row['Phone'];?></td>
<td><?php echo $row['Address'];?></td>
<td><?php echo $row['CardNo'];?></td>
<td><?php echo $row['Email'];?></td>
<td><?php echo $row['Qq'];?></td>
<td><?php echo $row['Depart'];?></td>
<td><?php echo $row['Area'];?></td>
<td><?php echo $row['WorkWx'];?></td>
</tr>
<?php endforeach;?>
</table>
<div class="page">
<p class="page-class">当前是第:<?php echo $currentPage ?>页,共:<?php echo $totalPages?>页 </p>
<a href="zy.php?p=1">首页</a>
<a href="zy.php?p=<?php echo ($currentPage-1)<=1?1:($currentPage-1) ?>">上一页</a>
<?php for ($i=1;$i<=$totalPages;$i++): ?>
<a class="<?php if ($currentPage==$i) {echo 'active';} ?>" href="zy.php?p=<?php echo $i ?>"><?php echo $i ?></a>
<?php endfor; ?>
<a href="zy.php?p=<?php echo ($currentPage+1)>=$totalPages?$totalPages:($currentPage+1) ?>">下一页</a>
<a href="zy.php?p=<?php echo $totalPages?>">尾页 </a>
<span> 跳转至:</span>
<form action="" method="get" style="display: inline-block">
<select name="p" id="">
<?php for ($i=1;$i<=$totalPages;$i++):?>
<option value="<?php echo $i;?>">
<?php echo $i; ?>
</option>
<?php endfor; ?>
</select>
<button>确定</button>
</form>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例

总结:
本章节老师讲解了分面查询原理与类封装,
分页功能的开发流程:
1-连接数据库
2-读取数据库数据
3-生成LIMIT语句获取分页数据
4-使用分页SQL语句获取数据
5-显示获取的数据
6-获取总记录数用于页数及算偏移量
7-对翻页以及页码进行处理
偏移量的计算方法= (当前页码 -1) * 每页显示的数量
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号