php实现分页功能
PHP实现分页功能
基础分页实现
使用MySQL的LIMIT子句结合PHP变量实现分页。假设每页显示10条数据:
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $perPage;
$sql = "SELECT * FROM table_name LIMIT $start, $perPage";
$result = $conn->query($sql);
计算总页数
获取总记录数并计算总页数:
$totalQuery = "SELECT COUNT(*) as total FROM table_name";
$totalResult = $conn->query($totalQuery);
$totalRows = $totalResult->fetch_assoc()['total'];
$totalPages = ceil($totalRows / $perPage);
生成分页链接
创建分页导航链接:

for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
改进的分页类
封装一个可复用的分页类:
class Pagination {
private $perPage;
private $page;
private $totalRows;
public function __construct($perPage = 10) {
$this->perPage = $perPage;
$this->page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
}
public function getOffset() {
return ($this->page - 1) * $this->perPage;
}
public function setTotalRows($total) {
$this->totalRows = $total;
}
public function getTotalPages() {
return ceil($this->totalRows / $this->perPage);
}
public function getLinks() {
$links = '';
$totalPages = $this->getTotalPages();
for ($i = 1; $i <= $totalPages; $i++) {
$links .= "<a href='?page=$i'>$i</a> ";
}
return $links;
}
}
使用分页类
$pagination = new Pagination(10);
$sql = "SELECT * FROM table_name LIMIT {$pagination->getOffset()}, {$pagination->perPage}";
$result = $conn->query($sql);
$totalQuery = "SELECT COUNT(*) as total FROM table_name";
$totalResult = $conn->query($totalQuery);
$pagination->setTotalRows($totalResult->fetch_assoc()['total']);
echo $pagination->getLinks();
Bootstrap分页样式
使用Bootstrap美化分页导航:

public function getBootstrapLinks() {
$html = '<nav><ul class="pagination">';
$totalPages = $this->getTotalPages();
for ($i = 1; $i <= $totalPages; $i++) {
$active = $i == $this->page ? 'active' : '';
$html .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
}
$html .= '</ul></nav>';
return $html;
}
AJAX分页实现
使用jQuery实现无刷新分页:
$(document).on('click', '.page-link', function(e) {
e.preventDefault();
var page = $(this).attr('href').split('=')[1];
$.ajax({
url: 'load_data.php',
type: 'GET',
data: {page: page},
success: function(data) {
$('#content').html(data);
}
});
});
分页最佳实践
确保对用户输入进行验证,防止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", $start, $perPage);
$stmt->execute();
对于大型数据集,考虑使用缓存或优化查询性能。






