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

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

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

性能优化建议

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

php mysql实现分页

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

相关文章

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <tem…

vue分页实现

vue分页实现

Vue 分页实现方法 基础分页组件实现 创建一个简单的分页组件,包含上一页、下一页和页码按钮。组件接收当前页码、总页数等参数,通过事件通知父组件页码变化。 <template> &…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n!…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现分页功能

php实现分页功能

PHP实现分页功能的方法 数据库查询与分页逻辑 使用SQL的LIMIT和OFFSET实现分页。假设每页显示10条数据,当前页码为$page: $perPage = 10; $page = isse…