当前位置:首页 > PHP

php mysql实现分页

2026-01-30 08:25:50PHP

PHP MySQL 分页实现方法

基础分页实现

分页的核心是通过 SQL 的 LIMIT 子句限制查询结果范围。基本语法如下:

SELECT * FROM table_name LIMIT offset, per_page

PHP 代码示例:

$per_page = 10; // 每页显示数量
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $per_page;

$sql = "SELECT * FROM articles LIMIT $offset, $per_page";
$result = mysqli_query($conn, $sql);

获取总记录数

计算总页数需要先获取总记录数:

php mysql实现分页

$total_query = "SELECT COUNT(*) as total FROM articles";
$total_result = mysqli_query($conn, $total_query);
$total_row = mysqli_fetch_assoc($total_result);
$total_records = $total_row['total'];
$total_pages = ceil($total_records / $per_page);

分页导航生成

生成基本的分页链接:

for ($i = 1; $i <= $total_pages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}

改进的分页类

更完整的分页处理可以封装成类:

php mysql实现分页

class Pagination {
    private $conn;
    private $table;
    private $per_page;

    public function __construct($conn, $table, $per_page = 10) {
        $this->conn = $conn;
        $this->table = $table;
        $this->per_page = $per_page;
    }

    public function getData($page = 1) {
        $offset = ($page - 1) * $this->per_page;
        $sql = "SELECT * FROM {$this->table} LIMIT $offset, {$this->per_page}";
        return mysqli_query($this->conn, $sql);
    }

    public function getLinks($current_page, $url = '?page=') {
        $total = $this->getTotal();
        $pages = ceil($total / $this->per_page);

        $links = '';
        for ($i = 1; $i <= $pages; $i++) {
            $active = $i == $current_page ? ' class="active"' : '';
            $links .= "<a href='{$url}{$i}'{$active}>{$i}</a> ";
        }
        return $links;
    }

    private function getTotal() {
        $sql = "SELECT COUNT(*) as total FROM {$this->table}";
        $result = mysqli_query($this->conn, $sql);
        $row = mysqli_fetch_assoc($result);
        return $row['total'];
    }
}

使用预处理语句的安全版本

为防止 SQL 注入,使用预处理语句:

$stmt = $conn->prepare("SELECT * FROM articles LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $per_page);
$stmt->execute();
$result = $stmt->get_result();

带搜索的分页

当有搜索条件时,需要在分页中保留搜索参数:

$search = isset($_GET['search']) ? $_GET['search'] : '';
$sql = "SELECT * FROM articles WHERE title LIKE ? LIMIT $offset, $per_page";
$stmt = $conn->prepare($sql);
$search_param = "%$search%";
$stmt->bind_param("s", $search_param);

分页链接需要包含搜索参数:

echo "<a href='?search=$search&page=$i'>$i</a>";

性能优化建议

对于大数据表,避免使用 COUNT(*),可以考虑缓存总记录数或使用近似值。在 WHERE 条件复杂的查询中,确保有适当的索引。

标签: 分页php
分享给朋友:

相关文章

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

vue router实现分页

vue router实现分页

使用 Vue Router 实现分页 在 Vue.js 项目中,可以通过 Vue Router 结合分页组件实现分页功能。以下是实现分页的几种方法: 使用路由参数传递页码 在路由配置中定义一个动态参…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…