php实现简单分页
PHP实现简单分页的方法
基本分页逻辑
分页的核心是通过LIMIT和OFFSET控制数据查询范围。假设每页显示10条数据,当前页码为$page:
$perPage = 10;
$offset = ($page - 1) * $perPage;
$sql = "SELECT * FROM table_name LIMIT $offset, $perPage";
完整实现示例
以下是一个结合MySQL和HTML的分页组件实现:
// 数据库连接
$conn = new mysqli('localhost', 'username', 'password', 'dbname');
// 获取总记录数
$totalQuery = $conn->query("SELECT COUNT(*) as total FROM table_name");
$totalRows = $totalQuery->fetch_assoc()['total'];
// 计算总页数
$perPage = 10;
$totalPages = ceil($totalRows / $perPage);
// 获取当前页码(从URL参数)
$page = isset($_GET['page']) ? max(1, min($totalPages, (int)$_GET['page'])) : 1;
// 查询当前页数据
$offset = ($page - 1) * $perPage;
$result = $conn->query("SELECT * FROM table_name LIMIT $offset, $perPage");
分页导航HTML
生成可分页的导航链接:
echo '<div class="pagination">';
if ($page > 1) {
echo '<a href="?page='.($page - 1).'">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page='.$i.'"'.($i == $page ? ' class="active"' : '').'>'.$i.'</a>';
}
if ($page < $totalPages) {
echo '<a href="?page='.($page + 1).'">下一页</a>';
}
echo '</div>';
样式优化建议
添加基础CSS样式提升视觉效果:
.pagination a {
display: inline-block;
padding: 8px 16px;
margin: 0 4px;
border: 1px solid #ddd;
text-decoration: none;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
安全注意事项
务必对页码参数进行过滤和验证,防止SQL注入:
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, [
'options' => [
'default' => 1,
'min_range' => 1
]
]);
扩展功能
对于大型数据集,考虑使用缓存机制存储分页结果。可采用预处理语句提升查询效率:
$stmt = $conn->prepare("SELECT * FROM table_name LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $perPage);
$stmt->execute();
以上实现可根据实际需求调整每页显示数量、添加跳转到指定页码功能或集成到框架(如Laravel的分页器)中。







