当前位置:首页 > 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);

获取总记录数

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

$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> ";
}

改进的分页类

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

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);

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

php mysql实现分页

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

性能优化建议

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

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

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…