PHP如何实现MySQL数据分页:添加页码功能详解
在PHP中为MySQL查询结果添加页码功能,主要通过计算数据总量、确定每页显示条数、使用LIMIT子句进行数据分片,并结合前端页码导航实现。 这一过程不仅能提升大量数据展示的用户体验,还能有效降低服务器和数据库的负载压力,下面我们将分步骤详细解析如何实现这一功能。
核心实现步骤
连接数据库并获取数据总数
首先需要建立与MySQL数据库的连接,并查询符合条件的数据总条数,这是计算总页数的基础:

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 获取总数据量
$sql = "SELECT COUNT(*) as total FROM your_table WHERE your_conditions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$total_records = $row['total'];
?>
设置分页参数
确定每页显示的数据条数和当前页码,通常通过GET参数获取当前页:
$records_per_page = 10; // 每页显示10条记录
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1; // 获取当前页码,默认为1
// 计算总页数
$total_pages = ceil($total_records / $records_per_page);
// 确保当前页码在有效范围内
if ($current_page < 1) {
$current_page = 1;
} elseif ($current_page > $total_pages && $total_pages > 0) {
$current_page = $total_pages;
}
// 计算LIMIT子句的偏移量
$offset = ($current_page - 1) * $records_per_page;
使用LIMIT查询当前页数据
这是实现分页的核心SQL技巧,通过LIMIT子句仅获取当前页需要显示的数据:
$sql = "SELECT * FROM your_table WHERE your_conditions LIMIT $offset, $records_per_page";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出当前页数据
while($row = $result->fetch_assoc()) {
echo "字段1: " . $row["column1"]. " - 字段2: " . $row["column2"]. "<br>";
}
} else {
echo "没有找到数据";
}
生成页码导航链接
创建用户可点击的页码导航,让用户能在不同页面间跳转:
echo "<div class='pagination'>";
if ($current_page > 1) {
echo "<a href='?page=".($current_page-1)."'>上一页</a> ";
}
// 显示页码链接
for ($i = 1; $i <= $total_pages; $i++) {
if ($i == $current_page) {
echo "<span class='current'>$i</span> ";
} else {
echo "<a href='?page=$i'>$i</a> ";
}
}
if ($current_page < $total_pages) {
echo "<a href='?page=".($current_page+1)."'>下一页</a>";
}
echo "</div>";
优化与安全建议
- 输入验证与过滤:始终对
$_GET['page']进行验证,确保其为正整数 - 性能优化:对于超大型数据集,考虑使用
WHERE子句配合索引,而不仅仅是LIMIT - 用户体验:添加首页、末页链接,当页数过多时使用"..."省略部分页码
- SQL注入防护:使用预处理语句或确保所有输入参数都经过严格过滤
完整示例代码
<?php
// 数据库连接
$conn = new mysqli("localhost", "username", "password", "database");
// 分页参数
$records_per_page = 10;
$current_page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;
// 获取总记录数
$count_result = $conn->query("SELECT COUNT(*) as total FROM products");
$total_records = $count_result->fetch_assoc()['total'];
$total_pages = ceil($total_rec 未经允许不得转载! 作者:HTML前端知识网,转载或复制请以超链接形式并注明出处HTML前端知识网。
原文地址:https://www.html4.cn/13009.html发布于:2026-08-25





