当前位置:首页 > PHP

用php实现分页

2026-01-30 07:58:12PHP

使用 PHP 实现分页

数据库查询与分页逻辑

分页的核心是通过 SQL 的 LIMIT 子句限制返回的数据量。假设从名为 articles 的表中分页查询数据:

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

// 当前页码,默认为第1页
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10; // 每页显示10条数据
$offset = ($page - 1) * $perPage; // 计算偏移量

// 查询总记录数
$totalStmt = $db->query("SELECT COUNT(*) FROM articles");
$total = $totalStmt->fetchColumn();

// 查询当前页数据
$stmt = $db->prepare("SELECT * FROM articles LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

生成分页链接

根据总记录数和每页显示数量计算总页数,并生成分页导航:

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

// 生成分页链接
echo '<div class="pagination">';
if ($page > 1) {
    echo '<a href="?page=' . ($page - 1) . '">上一页</a>';
}
for ($i = 1; $i <= $totalPages; $i++) {
    $active = $i == $page ? ' class="active"' : '';
    echo '<a href="?page=' . $i . '"' . $active . '>' . $i . '</a>';
}
if ($page < $totalPages) {
    echo '<a href="?page=' . ($page + 1) . '">下一页</a>';
}
echo '</div>';
?>

样式优化(可选)

为分页导航添加基础 CSS 样式:

.pagination {
    margin: 20px 0;
    display: flex;
    gap: 5px;
}
.pagination a {
    padding: 5px 10px;
    border: 1px solid #ddd;
    text-decoration: none;
}
.pagination a.active {
    background: #007bff;
    color: white;
}

完整示例

将数据库查询、分页逻辑和界面展示整合:

用php实现分页

<?php
// 连接数据库
$db = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');

// 分页参数
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$perPage = 10;
$offset = ($page - 1) * $perPage;

// 获取总记录数
$totalStmt = $db->query("SELECT COUNT(*) FROM articles");
$total = $totalStmt->fetchColumn();
$totalPages = ceil($total / $perPage);

// 获取当前页数据
$stmt = $db->prepare("SELECT * FROM articles LIMIT :offset, :perPage");
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT);
$stmt->bindParam(':perPage', $perPage, PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

<!-- 显示数据 -->
<ul>
<?php foreach ($articles as $article): ?>
    <li><?= htmlspecialchars($article['title']) ?></li>
<?php endforeach; ?>
</ul>

<!-- 分页导航 -->
<div class="pagination">
    <?php if ($page > 1): ?>
        <a href="?page=<?= $page - 1 ?>">上一页</a>
    <?php endif; ?>

    <?php for ($i = 1; $i <= $totalPages; $i++): ?>
        <a href="?page=<?= $i ?>" <?= $i == $page ? 'class="active"' : '' ?>>
            <?= $i ?>
        </a>
    <?php endfor; ?>

    <?php if ($page < $totalPages): ?>
        <a href="?page=<?= $page + 1 ?>">下一页</a>
    <?php endif; ?>
</div>

注意事项

  • 安全性:始终对用户输入的页码进行类型转换和验证,防止 SQL 注入。
  • 性能:大数据表分页时,避免使用 COUNT(*),可通过缓存或估算优化。
  • 扩展性:复杂场景可封装独立的分页类,支持自定义样式和参数。

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

相关文章

vue组件传值实现分页

vue组件传值实现分页

Vue 组件传值实现分页 在Vue中实现分页功能,通常需要父子组件之间的数据传递。以下是几种常见的传值方法: 使用props和$emit 父组件通过props向子组件传递数据,子组件通过$emit向…

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用 Element UI 分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。需要先安装 Element UI 库。 安装 Ele…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现推送

php实现推送

PHP 实现推送功能的方法 PHP 实现推送功能可以通过多种方式完成,包括 WebSocket、Server-Sent Events (SSE)、长轮询或第三方推送服务。以下是几种常见的方法: 使用…