php如何实现分页
PHP 分页实现方法
基础分页实现
在 PHP 中实现分页通常需要结合 SQL 查询的 LIMIT 子句。以下是一个简单的分页实现示例:
// 定义每页显示的记录数
$recordsPerPage = 10;
// 获取当前页码
$currentPage = isset($_GET['page']) ? (int)$_GET['page'] : 1;
// 计算偏移量
$offset = ($currentPage - 1) * $recordsPerPage;
// 查询数据
$sql = "SELECT * FROM your_table LIMIT $offset, $recordsPerPage";
$result = mysqli_query($connection, $sql);
// 获取总记录数
$totalRecords = mysqli_fetch_assoc(mysqli_query($connection, "SELECT COUNT(*) as total FROM your_table"))['total'];
// 计算总页数
$totalPages = ceil($totalRecords / $recordsPerPage);
分页链接生成
生成分页导航链接的代码示例:

// 显示分页导航
echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
if ($i == $currentPage) {
echo "<span>$i</span>";
} else {
echo "<a href='?page=$i'>$i</a>";
}
}
echo '</div>';
使用预处理语句防止 SQL 注入
更安全的方式是使用预处理语句:
$stmt = $connection->prepare("SELECT * FROM your_table LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $recordsPerPage);
$stmt->execute();
$result = $stmt->get_result();
使用 PDO 实现分页
使用 PDO 的示例代码:

$pdo = new PDO("mysql:host=localhost;dbname=your_db", "username", "password");
$stmt = $pdo->prepare("SELECT * FROM your_table LIMIT :offset, :limit");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $recordsPerPage, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
高级分页功能
实现更复杂的分页功能,如显示页码范围:
$range = 3; // 显示当前页码前后各3页
$startPage = max(1, $currentPage - $range);
$endPage = min($totalPages, $currentPage + $range);
echo '<div class="pagination">';
if ($currentPage > 1) {
echo "<a href='?page=1'>« First</a>";
echo "<a href='?page=".($currentPage - 1)."'>‹ Prev</a>";
}
for ($i = $startPage; $i <= $endPage; $i++) {
if ($i == $currentPage) {
echo "<span>$i</span>";
} else {
echo "<a href='?page=$i'>$i</a>";
}
}
if ($currentPage < $totalPages) {
echo "<a href='?page=".($currentPage + 1)."'>Next ›</a>";
echo "<a href='?page=$totalPages'>Last »</a>";
}
echo '</div>';
使用 Bootstrap 样式
结合 Bootstrap 的分页样式:
echo '<nav aria-label="Page navigation">';
echo '<ul class="pagination">';
echo '<li class="page-item'.($currentPage == 1 ? ' disabled' : '').'">';
echo '<a class="page-link" href="?page=1" aria-label="First"><span aria-hidden="true">«</span></a></li>';
for ($i = 1; $i <= $totalPages; $i++) {
echo '<li class="page-item'.($i == $currentPage ? ' active' : '').'">';
echo '<a class="page-link" href="?page='.$i.'">'.$i.'</a></li>';
}
echo '<li class="page-item'.($currentPage == $totalPages ? ' disabled' : '').'">';
echo '<a class="page-link" href="?page='.$totalPages.'" aria-label="Last"><span aria-hidden="true">»</span></a></li>';
echo '</ul>';
echo '</nav>';
使用分页类库
对于更复杂的项目,可以考虑使用现成的分页类库,如 Laravel 的 Paginator 或独立的 PHP 分页类库。这些类库通常提供更多功能和更好的灵活性。






