php 实现分页
PHP 实现分页的方法
使用 MySQL 的 LIMIT 语句
在 SQL 查询中使用 LIMIT 语句可以实现分页功能。LIMIT 接受两个参数:起始位置和返回的记录数。
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $offset, $perPage";
$result = $conn->query($sql);
计算总页数
为了显示分页导航,需要计算总页数。首先查询总记录数,然后除以每页显示的记录数。
$totalSql = "SELECT COUNT(*) as total FROM your_table";
$totalResult = $conn->query($totalSql);
$totalRow = $totalResult->fetch_assoc();
$totalPages = ceil($totalRow['total'] / $perPage);
生成分页导航
在页面底部生成分页导航链接,允许用户跳转到不同的页码。
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
使用预处理语句防止 SQL 注入
为了提高安全性,建议使用预处理语句来执行分页查询。
$stmt = $conn->prepare("SELECT * FROM your_table LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $perPage);
$stmt->execute();
$result = $stmt->get_result();
使用 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>';
使用 AJAX 实现无刷新分页
如果需要无刷新分页,可以使用 AJAX 来加载分页数据。
// JavaScript 部分
function loadPage(page) {
$.ajax({
url: 'get_data.php',
data: {page: page},
success: function(data) {
$('#data-container').html(data);
}
});
}
// get_data.php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM your_table LIMIT $offset, $perPage";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo "<div>{$row['column_name']}</div>";
}
使用现成的分页库
可以考虑使用现成的分页库,如 Pagerfanta 或 KnpPaginatorBundle(Symfony 项目),以简化分页实现。
// 使用 Pagerfanta 示例
use Pagerfanta\Pagerfanta;
use Pagerfanta\Adapter\ArrayAdapter;
$adapter = new ArrayAdapter($yourDataArray);
$pagerfanta = new Pagerfanta($adapter);
$pagerfanta->setMaxPerPage($perPage);
$pagerfanta->setCurrentPage($page);
foreach ($pagerfanta->getCurrentPageResults() as $item) {
echo $item;
}
以上方法涵盖了从基础到高级的 PHP 分页实现,可以根据项目需求选择适合的方式。






