当前位置:首页 > PHP

php分页实现代码

2026-01-29 04:35:29PHP

PHP 分页实现代码

分页是Web开发中常见的功能,用于将大量数据分割成多个页面显示。以下是几种常见的PHP分页实现方法。

基础分页实现

使用MySQL的LIMIT子句结合PHP计算分页参数:

<?php
// 数据库连接
$db = new mysqli('localhost', 'username', 'password', 'database');

// 每页显示数量
$perPage = 10;

// 当前页码(从URL获取)
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$start = ($page > 1) ? ($page - 1) * $perPage : 0;

// 查询总记录数
$total = $db->query("SELECT COUNT(*) FROM table")->fetch_row()[0];

// 查询当前页数据
$result = $db->query("SELECT * FROM table LIMIT $start, $perPage");

// 显示数据
while ($row = $result->fetch_assoc()) {
    echo $row['column_name'] . "<br>";
}

// 计算总页数
$totalPages = ceil($total / $perPage);

// 生成分页链接
for ($i = 1; $i <= $totalPages; $i++) {
    echo "<a href='?page=$i'>$i</a> ";
}

// 关闭连接
$db->close();
?>

使用PDO实现分页

PDO提供了更安全的数据库操作方式:

<?php
try {
    $pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');

    $perPage = 10;
    $page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    $start = ($page > 1) ? ($page - 1) * $perPage : 0;

    // 查询总记录数
    $stmt = $pdo->query("SELECT COUNT(*) FROM table");
    $total = $stmt->fetchColumn();

    // 查询当前页数据
    $stmt = $pdo->prepare("SELECT * FROM table LIMIT :start, :perPage");
    $stmt->bindValue(':start', $start, PDO::PARAM_INT);
    $stmt->bindValue(':perPage', $perPage, PDO::PARAM_INT);
    $stmt->execute();

    // 显示数据
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo $row['column_name'] . "<br>";
    }

    // 分页导航
    $totalPages = ceil($total / $perPage);
    for ($i = 1; $i <= $totalPages; $i++) {
        echo "<a href='?page=$i'>$i</a> ";
    }

} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
?>

封装分页类

可以创建一个可重用的分页类:

<?php
class Pagination {
    private $db;
    private $perPage;
    private $page;

    public function __construct($db, $perPage = 10) {
        $this->db = $db;
        $this->perPage = $perPage;
        $this->page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
    }

    public function getData($table) {
        $start = ($this->page > 1) ? ($this->page - 1) * $this->perPage : 0;
        $query = "SELECT * FROM $table LIMIT $start, $this->perPage";
        return $this->db->query($query);
    }

    public function getLinks($table) {
        $total = $this->db->query("SELECT COUNT(*) FROM $table")->fetch_row()[0];
        $totalPages = ceil($total / $this->perPage);

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

        return $links;
    }
}

// 使用示例
$db = new mysqli('localhost', 'username', 'password', 'database');
$pagination = new Pagination($db);
$result = $pagination->getData('table');

while ($row = $result->fetch_assoc()) {
    echo $row['column_name'] . "<br>";
}

echo $pagination->getLinks('table');
$db->close();
?>

前端分页样式优化

可以结合Bootstrap等前端框架美化分页导航:

// 在getLinks方法中修改
public function getLinks($table) {
    $total = $this->db->query("SELECT COUNT(*) FROM $table")->fetch_row()[0];
    $totalPages = ceil($total / $this->perPage);

    $links = '<nav><ul class="pagination">';
    for ($i = 1; $i <= $totalPages; $i++) {
        $active = ($i == $this->page) ? 'active' : '';
        $links .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
    }
    $links .= '</ul></nav>';

    return $links;
}

分页性能优化

对于大型数据集,可以考虑以下优化:

// 使用预处理语句防止SQL注入
$stmt = $db->prepare("SELECT * FROM table LIMIT ?, ?");
$stmt->bind_param('ii', $start, $perPage);
$stmt->execute();
$result = $stmt->get_result();

// 添加索引加速COUNT查询
ALTER TABLE table ADD INDEX (id);

// 缓存总记录数
$cache = new Memcached();
$cache->addServer('localhost', 11211);
$total = $cache->get('total_records');
if (!$total) {
    $total = $db->query("SELECT COUNT(*) FROM table")->fetch_row()[0];
    $cache->set('total_records', $total, 3600);
}

以上代码提供了从基础到进阶的PHP分页实现方案,可以根据项目需求选择合适的实现方式。

php分页实现代码

标签: 分页代码
分享给朋友:

相关文章

分页实现vue

分页实现vue

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

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

vue搜索过后实现分页

vue搜索过后实现分页

实现 Vue 搜索后分页的方法 数据绑定与搜索逻辑 在 Vue 组件中定义数据属性,包括原始数据列表、搜索关键词、分页相关参数: data() { return { originalL…

vue本地查询代码实现

vue本地查询代码实现

Vue 本地查询代码实现 在Vue中实现本地查询功能,可以通过以下几种方式实现,具体取决于数据源和查询需求。 使用计算属性进行本地查询 计算属性是Vue中处理响应式数据查询的高效方式,适合基于现有数…

vue前端分页怎么实现

vue前端分页怎么实现

使用 Element UI 的分页组件 Element UI 提供了现成的分页组件 <el-pagination>,可以快速实现分页功能。需要安装 Element UI 并注册组件。…

h5实现响应式代码

h5实现响应式代码

响应式设计基础 HTML5实现响应式设计主要通过媒体查询(Media Queries)、弹性布局(Flexbox)、网格布局(Grid)和视口设置(Viewport Meta Tag)等技术。核心目标…