用php实现分页
实现分页功能
在PHP中实现分页功能通常涉及数据库查询和页面显示的协调。以下是实现分页的详细步骤:
连接数据库
确保已建立数据库连接。使用PDO或MySQLi扩展连接数据库:
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
获取当前页码
通过GET参数获取当前页码,如果没有指定则默认为第一页:
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示的记录数
$offset = ($page - 1) * $perPage;
查询数据
使用LIMIT和OFFSET进行分页查询:
$stmt = $pdo->prepare("SELECT * FROM your_table LIMIT :perPage OFFSET :offset");
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
计算总页数
查询总记录数并计算总页数:
$totalStmt = $pdo->query("SELECT COUNT(*) FROM your_table");
$total = $totalStmt->fetchColumn();
$totalPages = ceil($total / $perPage);
显示分页导航
生成分页导航链接:
echo '<div class="pagination">';
for ($i = 1; $i <= $totalPages; $i++) {
echo '<a href="?page=' . $i . '"';
if ($i == $page) {
echo ' class="active"';
}
echo '>' . $i . '</a> ';
}
echo '</div>';
显示数据
遍历查询结果并显示数据:
foreach ($results as $row) {
echo '<div>' . htmlspecialchars($row['column_name']) . '</div>';
}
优化分页性能
对于大型数据集,使用索引和缓存可以提高分页性能。避免使用SELECT *,只查询必要的列。
防止SQL注入
始终使用预处理语句绑定参数,避免直接拼接SQL查询字符串。
样式化分页导航
通过CSS美化分页导航:
.pagination a {
padding: 8px 16px;
text-decoration: none;
border: 1px solid #ddd;
margin: 0 4px;
}
.pagination a.active {
background-color: #4CAF50;
color: white;
border: 1px solid #4CAF50;
}
.pagination a:hover:not(.active) {
background-color: #ddd;
}
处理边界情况
检查页码是否超出范围,避免出现负数或超过总页数的情况:
if ($page < 1) {
$page = 1;
} elseif ($page > $totalPages) {
$page = $totalPages;
}






