用php实现分页


实现分页功能
使用PHP实现分页功能通常需要结合数据库查询和HTML显示逻辑。以下是实现分页的详细步骤:
获取当前页码和每页记录数
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$per_page = 10; // 每页显示的记录数
计算总记录数和总页数
// 假设从数据库获取总记录数
$total_records = $db->query("SELECT COUNT(*) FROM your_table")->fetchColumn();
$total_pages = ceil($total_records / $per_page);
计算数据偏移量并查询当前页数据
$offset = ($current_page - 1) * $per_page;
$stmt = $db->prepare("SELECT * FROM your_table LIMIT :offset, :per_page");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':per_page', $per_page, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
生成分页链接
$pagination = '';
for ($i = 1; $i <= $total_pages; $i++) {
$active = ($i == $current_page) ? 'active' : '';
$pagination .= "<a href='?page=$i' class='$active'>$i</a> ";
}
显示分页导航
echo "<div class='pagination'>$pagination</div>";
完整示例代码
<?php
// 数据库连接
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
// 分页参数
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$per_page = 10;
// 获取总记录数
$total_records = $db->query("SELECT COUNT(*) FROM your_table")->fetchColumn();
$total_pages = ceil($total_records / $per_page);
// 确保当前页在有效范围内
$current_page = max(1, min($current_page, $total_pages));
// 获取当前页数据
$offset = ($current_page - 1) * $per_page;
$stmt = $db->prepare("SELECT * FROM your_table LIMIT :offset, :per_page");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':per_page', $per_page, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 显示数据
foreach ($results as $row) {
echo "<div>{$row['id']}: {$row['name']}</div>";
}
// 生成分页链接
echo "<div class='pagination'>";
if ($current_page > 1) {
echo "<a href='?page=".($current_page-1)."'>上一页</a> ";
}
for ($i = 1; $i <= $total_pages; $i++) {
$active = ($i == $current_page) ? 'active' : '';
echo "<a href='?page=$i' class='$active'>$i</a> ";
}
if ($current_page < $total_pages) {
echo "<a href='?page=".($current_page+1)."'>下一页</a>";
}
echo "</div>";
?>
样式建议
.pagination {
margin-top: 20px;
text-align: center;
}
.pagination a {
display: inline-block;
padding: 5px 10px;
margin: 0 2px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
}
.pagination a.active {
background-color: #007bff;
color: white;
border-color: #007bff;
}
注意事项
- 确保数据库查询使用预处理语句防止SQL注入
- 处理当前页码超出范围的情况
- 考虑添加"上一页"和"下一页"按钮提高用户体验
- 对于大数据量表,考虑使用更高效的分页方法,如基于游标的分页






