php分页代码简单实现
基本分页实现
在PHP中实现分页功能通常需要结合MySQL的LIMIT子句。以下是一个基础实现示例:
<?php
// 数据库连接
$conn = mysqli_connect("localhost", "username", "password", "database");
// 每页显示数量
$perPage = 10;
// 当前页码(从URL参数获取)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page - 1) * $perPage;
// 获取总记录数
$totalQuery = "SELECT COUNT(*) FROM your_table";
$totalResult = mysqli_query($conn, $totalQuery);
$totalRows = mysqli_fetch_row($totalResult)[0];
$totalPages = ceil($totalRows / $perPage);
// 获取当前页数据
$query = "SELECT * FROM your_table LIMIT $start, $perPage";
$result = mysqli_query($conn, $query);
// 显示数据
while ($row = mysqli_fetch_assoc($result)) {
echo $row['column_name']."<br>";
}
// 生成分页链接
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
?>
使用PDO实现分页
PDO方式更安全,推荐使用:

<?php
$pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
$perPage = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $perPage;
// 获取总记录数
$stmt = $pdo->query("SELECT COUNT(*) FROM your_table");
$totalRows = $stmt->fetchColumn();
$totalPages = ceil($totalRows / $perPage);
// 获取当前页数据
$stmt = $pdo->prepare("SELECT * FROM your_table LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
// 显示数据
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['column_name']."<br>";
}
// 分页导航
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='?page=$i'>$i</a> ";
}
?>
分页样式优化
可以添加CSS样式美化分页导航:

<style>
.pagination {
display: inline-block;
margin: 20px 0;
}
.pagination a {
color: black;
float: left;
padding: 8px 16px;
text-decoration: none;
border: 1px solid #ddd;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
.pagination a:hover:not(.active) {
background-color: #ddd;
}
</style>
<div class="pagination">
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<a href="?page=<?= $i ?>" <?= ($i == $page) ? 'class="active"' : '' ?>><?= $i ?></a>
<?php endfor; ?>
</div>
分页函数封装
可以将分页逻辑封装为可重用函数:
function getPaginationData($table, $perPage = 10, $pageParam = 'page') {
global $pdo;
$page = isset($_GET[$pageParam]) ? (int)$_GET[$pageParam] : 1;
$offset = ($page - 1) * $perPage;
$totalStmt = $pdo->query("SELECT COUNT(*) FROM $table");
$totalRows = $totalStmt->fetchColumn();
$totalPages = ceil($totalRows / $perPage);
$stmt = $pdo->prepare("SELECT * FROM $table LIMIT :offset, :perPage");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
return [
'data' => $stmt->fetchAll(PDO::FETCH_ASSOC),
'current_page' => $page,
'total_pages' => $totalPages,
'total_rows' => $totalRows
];
}
// 使用示例
$result = getPaginationData('your_table');
foreach ($result['data'] as $row) {
echo $row['column_name']."<br>";
}
分页安全注意事项
为防止SQL注入,务必使用参数化查询。避免直接将用户输入拼接到SQL语句中。
对于大型数据集,考虑添加索引优化查询性能。如果数据量极大(百万级以上),可能需要考虑更高级的分页技术如"seek method"或缓存策略。






