PHP+MySQL实现分页功能 - 从入门到精通
<?php
require __DIR__ . '/mysql.php';
// 获取前端传递的页码
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
// 获取搜索关键词
$name = isset($_POST['name']) ? $_POST['name'] : '';
// 启动会话
session_start();
// 检查用户是否登录
if(!isset($_SESSION['userInfo'])){
echo json_encode(['type' => -1]);
die;
}
// 计算分页起始位置
$offset = ($page - 1) * 10;
// 构造SQL查询语句
if(!empty($name)){
$sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id where a.name like '%'. $name .'%' order by a.id desc limit '. $offset .',10';
$countSql = 'SELECT count(*) as count FROM student where name like '%'. $name .'%'';
}else{
$sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id order by a.id desc limit '. $offset .',10';
$countSql = 'SELECT count(*) as count FROM student';
}
// 执行查询
$result = @mysqli_query($link,$sql);
$list = @mysqli_fetch_all($result,MYSQLI_ASSOC);
// 获取数据总数
$result = @mysqli_query($link, $countSql);
$count = mysqli_fetch_assoc($result);
// 计算总页数
$totalPage = ceil($count['count']/10);
// 关闭数据库连接
mysqli_close($link);
// 组装返回数据
$data = [
'list' => $list,
'page' => $totalPage,
'type' => 1
];
// 返回JSON格式数据
echo json_encode($data);
die;
以下是分页的关键代码解析:
- 获取页码并计算偏移量:
$page = isset($_POST['page']) ? intval($_POST['page']) : 1;
$offset = ($page - 1) * 10;
- 首先,我们使用
$_POST['page']获取前端传递的页码,并使用intval()函数将其转换为整数类型。 - 然后,我们计算出分页的起始位置
$offset,即(页码 - 1) * 每页显示条数。
- 构建分页查询语句:
$sql = 'SELECT a.*,b.major_name FROM student as a join major as b on a.major_id=b.id order by a.id desc limit '. $offset .',10';
- 在查询语句中,我们使用
limit关键字限制查询结果的数量和起始位置。 $offset表示起始位置,10表示每页显示的条数。
- 计算总页数:
$totalPage = ceil($count['count']/10);
- 我们使用
ceil()函数向上取整,计算出总页数。
安全注意事项:
- 使用预处理语句或参数化查询来防止SQL注入攻击。
- 对用户输入进行验证和过滤,确保数据的安全性。
- 不要将敏感信息(如数据库密码)直接暴露在代码中,可以使用配置文件或环境变量来存储。
希望这篇博客文章能够帮助你理解如何在PHP中实现分页功能。如果你有任何问题或建议,请随时留言。
原文地址: https://www.cveoy.top/t/topic/f1Mr 著作权归作者所有。请勿转载和采集!