php和mysql实现分页
PHP 和 MySQL 实现分页的方法
获取总记录数
需要从数据库中查询满足条件的总记录数,用于计算总页数。可以使用 COUNT(*) 函数实现:
$sql = "SELECT COUNT(*) AS total FROM your_table WHERE your_conditions";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$total_records = $row['total'];
计算总页数和当前页
根据每页显示的记录数和总记录数计算总页数,并确定当前页码:
$records_per_page = 10;
$total_pages = ceil($total_records / $records_per_page);
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
if ($current_page < 1) {
$current_page = 1;
} elseif ($current_page > $total_pages) {
$current_page = $total_pages;
}
构建分页查询
使用 LIMIT 子句实现分页查询,确保查询只返回当前页的记录:
$offset = ($current_page - 1) * $records_per_page;
$sql = "SELECT * FROM your_table WHERE your_conditions LIMIT $offset, $records_per_page";
$result = $conn->query($sql);
显示分页导航
生成分页导航链接,允许用户跳转到不同页码:
echo '<div class="pagination">';
if ($current_page > 1) {
echo '<a href="?page=' . ($current_page - 1) . '">Previous</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) . '">Next</a>';
}
echo '</div>';
完整示例代码
以下是一个完整的示例代码,展示如何实现分页功能:

<?php
$conn = new mysqli('localhost', 'username', 'password', 'database');
$records_per_page = 10;
$sql = "SELECT COUNT(*) AS total FROM your_table";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$total_records = $row['total'];
$total_pages = ceil($total_records / $records_per_page);
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
if ($current_page < 1) {
$current_page = 1;
} elseif ($current_page > $total_pages) {
$current_page = $total_pages;
}
$offset = ($current_page - 1) * $records_per_page;
$sql = "SELECT * FROM your_table LIMIT $offset, $records_per_page";
$result = $conn->query($sql);
while ($row = $result->fetch_assoc()) {
echo $row['column_name'] . '<br>';
}
echo '<div class="pagination">';
if ($current_page > 1) {
echo '<a href="?page=' . ($current_page - 1) . '">Previous</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) . '">Next</a>';
}
echo '</div>';
$conn->close();
?>
注意事项
- 确保对用户输入的页码进行验证和过滤,防止 SQL 注入攻击。
- 使用预处理语句可以提高安全性,特别是在处理动态 SQL 查询时。
- 对于大型数据集,考虑使用缓存技术优化分页性能。






