php 实现分页
PHP 实现分页的方法
使用 MySQL LIMIT 和 OFFSET
分页通常通过 SQL 的 LIMIT 和 OFFSET 实现。假设每页显示 10 条记录,当前页码为 $page:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $perPage OFFSET $offset";
$result = $conn->query($sql);
计算总页数
需要查询总记录数以计算总页数:
$totalQuery = "SELECT COUNT(*) as total FROM your_table";
$totalResult = $conn->query($totalQuery);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);
生成分页链接
在页面底部生成分页导航:

echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page=' . $i . '">' . $i . '</a> ';
}
echo '</div>';
使用 Bootstrap 分页样式
如果需要更美观的分页,可以结合 Bootstrap:
echo '<nav aria-label="Page navigation">';
echo '<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>';
echo '</nav>';
使用预处理语句防止 SQL 注入
为确保安全性,建议使用预处理语句:

$stmt = $conn->prepare("SELECT * FROM your_table LIMIT ? OFFSET ?");
$stmt->bind_param("ii", $perPage, $offset);
$stmt->execute();
$result = $stmt->get_result();
封装为函数
可以将分页逻辑封装为函数以便复用:
function getPaginatedData($conn, $table, $perPage = 10, $page = 1) {
$offset = ($page - 1) * $perPage;
$stmt = $conn->prepare("SELECT * FROM $table LIMIT ? OFFSET ?");
$stmt->bind_param("ii", $perPage, $offset);
$stmt->execute();
return $stmt->get_result();
}
使用第三方库
对于复杂项目,可以考虑使用分页库如 illuminate/pagination(Laravel 组件):
use Illuminate\Pagination\Paginator;
$perPage = 10;
$currentPage = $_GET['page'] ?? 1;
$items = [...]; // 你的数据数组
$paginator = new Paginator($items, $perPage, $currentPage);
foreach ($paginator as $item) {
// 显示每项内容
}
echo $paginator->links(); // 显示分页链接






