php实现分页
PHP实现分页的基本方法
在PHP中实现分页功能通常需要结合MySQL数据库查询和前端HTML展示。以下是一个完整的分页实现方案:
数据库查询部分
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 计算总记录数
$total_query = "SELECT COUNT(*) as total FROM your_table";
$total_result = $conn->query($total_query);
$total_row = $total_result->fetch_assoc();
$total_records = $total_row['total'];
// 设置每页显示数量
$records_per_page = 10;
// 计算总页数
$total_pages = ceil($total_records / $records_per_page);
// 获取当前页码
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$current_page = max(1, min($current_page, $total_pages));
// 计算偏移量
$offset = ($current_page - 1) * $records_per_page;
// 获取当前页数据
$query = "SELECT * FROM your_table LIMIT $offset, $records_per_page";
$result = $conn->query($query);
前端分页导航实现
HTML显示部分
// 显示数据
while($row = $result->fetch_assoc()) {
echo "<div>{$row['field_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++) {
if($i == $current_page) {
echo "<span class='current'>$i</span>";
} else {
echo "<a href='?page=$i'>$i</a>";
}
}
if($current_page < $total_pages) {
echo "<a href='?page=".($current_page+1)."'>下一页</a>";
}
echo '</div>';
使用PDO实现更安全的分页
// 使用PDO预处理语句防止SQL注入
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$stmt = $pdo->prepare("SELECT * FROM your_table LIMIT :offset, :limit");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $records_per_page, PDO::PARAM_INT);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
// 显示数据
}
分页样式优化建议
添加CSS样式使分页导航更美观:
.pagination {
margin: 20px 0;
text-align: center;
}
.pagination a, .pagination span {
display: inline-block;
padding: 5px 10px;
margin: 0 2px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
}
.pagination .current {
background: #007bff;
color: white;
border-color: #007bff;
}
.pagination a:hover {
background: #f5f5f5;
}
分页功能扩展
对于大型数据集,可以考虑使用更高效的分页方法:
// 使用WHERE子句替代LIMIT OFFSET(适用于有主键的表)
$last_id = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
$query = "SELECT * FROM your_table WHERE id > $last_id ORDER BY id LIMIT $records_per_page";
这种方法避免了OFFSET在大数据量时的性能问题,特别适合无限滚动或"加载更多"类型的分页。







