php实现分页显示怎么实现
基本分页实现
在PHP中实现分页功能,通常需要结合SQL的LIMIT子句和前端页码控制。以下是一个基础实现方法:
// 获取当前页码,默认为1
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示数量
$offset = ($page - 1) * $perPage;
// 查询总记录数
$total = $db->query("SELECT COUNT(*) FROM table")->fetchColumn();
$totalPages = ceil($total / $perPage);
// 查询当前页数据
$stmt = $db->query("SELECT * FROM table LIMIT $offset, $perPage");
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
分页链接生成
生成分页导航链接时需要考虑边界情况(如第一页/最后一页):

// 生成分页链接
$pagination = '';
if ($totalPages > 1) {
$pagination .= '<div class="pagination">';
// 上一页链接
if ($page > 1) {
$pagination .= '<a href="?page='.($page-1).'">上一页</a>';
}
// 页码链接
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $page) {
$pagination .= '<span class="current">'.$i.'</span>';
} else {
$pagination .= '<a href="?page='.$i.'">'.$i.'</a>';
}
}
// 下一页链接
if ($page < $totalPages) {
$pagination .= '<a href="?page='.($page+1).'">下一页</a>';
}
$pagination .= '</div>';
}
使用预处理语句
为防止SQL注入,建议使用预处理语句:

$stmt = $db->prepare("SELECT * FROM table LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
分页样式优化
可以添加省略号处理大量页码的情况,提升用户体验:
$range = 2; // 当前页前后显示的页码数
if ($totalPages > 1) {
$pagination .= '<div class="pagination">';
if ($page > 1) {
$pagination .= '<a href="?page=1">首页</a>';
$pagination .= '<a href="?page='.($page-1).'">上一页</a>';
}
// 显示页码范围
$start = max(1, $page - $range);
$end = min($totalPages, $page + $range);
if ($start > 1) {
$pagination .= '<span>...</span>';
}
for ($i = $start; $i <= $end; $i++) {
// 页码链接代码...
}
if ($end < $totalPages) {
$pagination .= '<span>...</span>';
}
if ($page < $totalPages) {
$pagination .= '<a href="?page='.($page+1).'">下一页</a>';
$pagination .= '<a href="?page='.$totalPages.'">末页</a>';
}
$pagination .= '</div>';
}
AJAX分页实现
对于无刷新分页体验,可以使用AJAX:
// JavaScript部分
$(document).on('click', '.pagination a', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('page=')[1];
loadPage(page);
});
function loadPage(page) {
$.ajax({
url: 'data.php?page='+page,
type: 'GET',
success: function(data) {
$('#content').html(data.results);
$('#pagination').html(data.pagination);
}
});
}
// PHP部分(data.php)
$response = [
'results' => $resultsHtml,
'pagination' => $paginationHtml
];
echo json_encode($response);






