php 实现分页
PHP 实现分页的方法
使用 LIMIT 和 OFFSET 进行数据库查询
在 MySQL 或其他数据库中,可以使用 LIMIT 和 OFFSET 子句来实现分页查询。LIMIT 指定每页显示的记录数,OFFSET 指定从哪条记录开始显示。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $perPage OFFSET $offset";
$result = $conn->query($sql);
计算总页数
为了显示分页导航,需要计算总记录数和总页数。
$totalSql = "SELECT COUNT(*) as total FROM your_table";
$totalResult = $conn->query($totalSql);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);
生成分页链接
根据总页数生成分页导航链接,用户可以通过点击链接跳转到不同的页面。
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
使用 Bootstrap 美化分页
可以使用 Bootstrap 的分页组件来美化分页导航。
echo '<nav aria-label="Page navigation"><ul class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $page ? 'active' : '';
echo "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
}
echo '</ul></nav>';
使用 AJAX 实现无刷新分页
如果需要无刷新分页,可以使用 AJAX 技术。

$(document).on('click', '.page-link', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('=')[1];
$.ajax({
url: 'get_data.php',
type: 'GET',
data: {page: page},
success: function(data) {
$('#data-container').html(data);
}
});
});
使用 PHP 框架的分页功能
许多 PHP 框架(如 Laravel、CodeIgniter)提供了内置的分页功能。
Laravel 示例:
$data = DB::table('your_table')->paginate(10);
return view('your_view', ['data' => $data]);
在视图中:

{{ $data->links() }}
防止 SQL 注入
使用预处理语句来防止 SQL 注入。
$stmt = $conn->prepare("SELECT * FROM your_table LIMIT ? OFFSET ?");
$stmt->bind_param("ii", $perPage, $offset);
$stmt->execute();
$result = $stmt->get_result();
优化分页性能
对于大型数据集,可以使用更高效的分页方法,如基于游标的分页或延迟加载。
$lastId = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$sql = "SELECT * FROM your_table WHERE id > $lastId ORDER BY id LIMIT $perPage";
使用缓存提高性能
缓存分页结果以减少数据库查询次数。
$cacheKey = "page_$page";
if (!$data = $cache->get($cacheKey)) {
$data = fetchDataFromDatabase($page);
$cache->set($cacheKey, $data, 3600);
}
通过以上方法,可以灵活地在 PHP 中实现分页功能,满足不同的需求和场景。






