php实现第几页
PHP实现分页功能
分页功能在Web开发中非常常见,特别是在展示大量数据时。PHP可以通过多种方式实现分页功能。

基础分页实现
// 连接数据库
$conn = new mysqli('localhost', 'username', 'password', 'database');
// 每页显示的记录数
$records_per_page = 10;
// 获取当前页码
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start_from = ($page - 1) * $records_per_page;
// 查询数据
$query = "SELECT * FROM table_name LIMIT $start_from, $records_per_page";
$result = $conn->query($query);
// 显示数据
while ($row = $result->fetch_assoc()) {
echo $row['column_name']."<br>";
}
// 计算总页数
$total_query = "SELECT COUNT(*) FROM table_name";
$total_result = $conn->query($total_query);
$total_rows = $total_result->fetch_row()[0];
$total_pages = ceil($total_rows / $records_per_page);
// 分页链接
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='?page=".$i."'>".$i."</a> ";
}
使用PDO实现分页
try {
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
$records_per_page = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $records_per_page;
$stmt = $pdo->prepare("SELECT * FROM table_name LIMIT :offset, :limit");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':limit', $records_per_page, PDO::PARAM_INT);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['column_name']."<br>";
}
$total_stmt = $pdo->query("SELECT COUNT(*) FROM table_name");
$total_rows = $total_stmt->fetchColumn();
$total_pages = ceil($total_rows / $records_per_page);
for ($i = 1; $i <= $total_pages; $i++) {
echo "<a href='?page=".$i."'>".$i."</a> ";
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
使用Bootstrap美化分页
// 计算总页数后
echo '<nav aria-label="Page navigation">';
echo '<ul class="pagination">';
if ($page > 1) {
echo '<li class="page-item"><a class="page-link" href="?page='.($page - 1).'">Previous</a></li>';
}
for ($i = 1; $i <= $total_pages; $i++) {
$active = $i == $page ? ' active' : '';
echo '<li class="page-item'.$active.'"><a class="page-link" href="?page='.$i.'">'.$i.'</a></li>';
}
if ($page < $total_pages) {
echo '<li class="page-item"><a class="page-link" href="?page='.($page + 1).'">Next</a></li>';
}
echo '</ul>';
echo '</nav>';
分页类实现
可以创建一个独立的分页类来封装分页逻辑:

class Pagination {
private $total_records;
private $records_per_page;
private $current_page;
public function __construct($total_records, $records_per_page = 10, $current_page = 1) {
$this->total_records = $total_records;
$this->records_per_page = $records_per_page;
$this->current_page = $current_page;
}
public function getOffset() {
return ($this->current_page - 1) * $this->records_per_page;
}
public function getTotalPages() {
return ceil($this->total_records / $this->records_per_page);
}
public function getLinks($url = '?page=') {
$links = '';
$total_pages = $this->getTotalPages();
if ($this->current_page > 1) {
$links .= '<a href="'.$url.($this->current_page - 1).'">Previous</a> ';
}
for ($i = 1; $i <= $total_pages; $i++) {
if ($i == $this->current_page) {
$links .= '<strong>'.$i.'</strong> ';
} else {
$links .= '<a href="'.$url.$i.'">'.$i.'</a> ';
}
}
if ($this->current_page < $total_pages) {
$links .= '<a href="'.$url.($this->current_page + 1).'">Next</a>';
}
return $links;
}
}
使用示例:
$total_records = 100; // 从数据库获取总记录数
$records_per_page = 10;
$current_page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$pagination = new Pagination($total_records, $records_per_page, $current_page);
$offset = $pagination->getOffset();
// 使用$offset和$records_per_page查询数据
// ...
// 显示分页链接
echo $pagination->getLinks();






