php 实现翻页
实现基本分页功能
使用PHP的LIMIT子句结合MySQL实现分页是最常见的方法。需要计算当前页码和每页显示的记录数。
// 每页显示数量
$perPage = 10;
// 当前页码(从URL参数获取,默认为1)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 计算偏移量
$offset = ($page - 1) * $perPage;
// 查询数据
$sql = "SELECT * FROM your_table LIMIT $offset, $perPage";
$result = mysqli_query($conn, $sql);
// 获取总记录数
$totalQuery = "SELECT COUNT(*) as total FROM your_table";
$totalResult = mysqli_query($conn, $totalQuery);
$totalRow = mysqli_fetch_assoc($totalResult);
$totalRecords = $totalRow['total'];
生成分页链接
根据总记录数和每页显示数量计算总页数,并生成分页导航链接。
// 计算总页数
$totalPages = ceil($totalRecords / $perPage);
// 生成分页链接
echo '<div class="pagination">';
// 上一页链接
if ($page > 1) {
echo '<a href="?page='.($page - 1).'">上一页</a>';
}
// 页码链接
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $page) {
echo '<span class="current">'.$i.'</span>';
} else {
echo '<a href="?page='.$i.'">'.$i.'</a>';
}
}
// 下一页链接
if ($page < $totalPages) {
echo '<a href="?page='.($page + 1).'">下一页</a>';
}
echo '</div>';
使用预处理语句防止SQL注入
为确保安全性,建议使用预处理语句来处理分页查询。

$stmt = $conn->prepare("SELECT * FROM your_table LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $perPage);
$stmt->execute();
$result = $stmt->get_result();
优化分页性能
对于大数据表,使用传统LIMIT分页在后期页面性能会下降。可以考虑以下优化方法:
// 使用索引优化(假设id是主键)
$sql = "SELECT * FROM your_table WHERE id >=
(SELECT id FROM your_table ORDER BY id LIMIT $offset, 1)
LIMIT $perPage";
使用分页类库
对于复杂项目,可以考虑使用现成的分页类库,如Laravel的paginate方法:

// Laravel中的分页实现
$items = DB::table('your_table')->paginate($perPage);
// 视图中的分页链接
{{ $items->links() }}
AJAX分页实现
实现无刷新分页体验,使用jQuery结合PHP:
// 前端代码
$(document).on('click', '.pagination a', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
loadPage(page);
});
function loadPage(page) {
$.ajax({
url: 'get_data.php?page='+page,
success: function(data) {
$('#content').html(data);
}
});
}
// get_data.php
$page = $_GET['page'];
// 处理分页逻辑
// 返回HTML内容
分页样式美化
使用CSS美化分页导航,Bootstrap提供了现成的分页样式:
<nav aria-label="Page navigation">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>






