默默小谈PHP&MYSQL分页原理及实现

介绍

PHP和MYSQL是当前非常流行的两个技术,而分页在Web开发中也是非常常用的功能。本文将详细介绍PHP和MYSQL分页原理及其实现,让开发者可以更好地理解和实现分页功能。

分页原理

分页主要涉及两个概念:当前页和每页显示的记录数。在进行分页时,需要计算出总记录数和总页数。

总记录数的计算非常简单,只需要查询数据表中总的记录数即可。

总页数的计算需要用到分页公式:总页数 = 总记录数 / 每页显示的记录数,如果总记录数不能整除每页显示的记录数,就要向上取整。

在计算完成总页数后,我们需要根据用户传递的当前页信息来动态计算起始索引和结束索引。这可以通过两个公式来实现:

起始索引 = (当前页 - 1) * 每页显示的记录数

结束索引 = 起始索引 + 每页显示的记录数 - 1

实现方法

在PHP中,分页功能的实现可以通过以下几个步骤来完成:

1.连接MYSQL数据库

首先需要使用PHP连接MYSQL数据库,并且设置好字符编码。

<?php
$db = mysqli_connect('localhost', 'user', 'password', 'db_name');
mysqli_set_charset($db, 'utf8');
?>

2.查询总记录数与总页数

通过查询数据表的总记录数,然后使用分页公式计算总页数。

<?php
$sql = 'SELECT COUNT(*) as total_count FROM table_name';
$result = mysqli_query($db, $sql);
$row = mysqli_fetch_assoc($result);
$total_count = $row['total_count'];
$page_size = 10; //每页显示的记录数
$total_page = ceil($total_count / $page_size); //总页数
?>

3.处理当前页码

通过用户传递的当前页信息,计算出起始索引和结束索引。如果用户没有传递当前页信息,则默认为第一页。

<?php
if (isset($_GET['page'])) {
    $current_page = $_GET['page'];
} else {
    $current_page = 1;
}
$start_index = ($current_page - 1) * $page_size;
$end_index = $start_index + $page_size - 1;
?>

4.查询分页数据

根据起始索引和结束索引,查询需要显示的分页数据。

<?php
$sql = "SELECT * FROM table_name LIMIT {$start_index}, {$page_size}";
$result = mysqli_query($db, $sql);
while ($row = mysqli_fetch_assoc($result)) {
    //处理每行数据的逻辑
}
?>

5.渲染分页导航

通过计算出的总页数和当前页码,生成分页导航,支持用户跳转到指定页码。

<?php
echo '<div class="pagination">';
for ($i = 1; $i <= $total_page; $i++) {
    if ($i == $current_page) { //当前页码不需要超链接
        echo "<a href='#' class='active'>{$i}</a>";
    } else {
        echo "<a href='?page={$i}'>{$i}</a>";
    }
}
echo '</div>';
?>

示例

以下两个示例将演示如何通过PHP和MYSQL实现分页功能。

  1. 查询学生表的数据

学生表包含姓名、年龄、性别等字段信息,我们需要查询数据表中的全部记录,并进行分页显示。该示例需要使用以下mysql语句来创建学生表:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` int(11) NOT NULL,
  `gender` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
);

以下是PHP代码实现:



  <?php
    $db = mysqli_connect('localhost', 'username', 'password', 'dbname');
    mysqli_set_charset($db, 'utf8');

    $sql = "SELECT COUNT(*) as total_count FROM student";
    $result = mysqli_query($db, $sql);
    $row = mysqli_fetch_assoc($result);
    $total_count = $row['total_count'];
    $page_size = 5; //每页显示的记录数
    $total_page = ceil($total_count / $page_size); //总页数

    if (isset($_GET['page'])) {
        $current_page = $_GET['page'];
    } else {
        $current_page = 1;
    }
    $start_index = ($current_page - 1) * $page_size;
    $end_index = $start_index + $page_size - 1;

    $sql = "SELECT * FROM student LIMIT {$start_index}, {$page_size}";
    $result = mysqli_query($db, $sql);

    echo '<table>';
    echo '<tr><th>ID</th><th>Name</th><th>Age</th><th>Gender</th></tr>';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<tr><td>' . $row['id'] . '</td><td>' . $row['name'] . '</td><td>' . $row['age'] . '</td><td>' . $row['gender'] . '</td></tr>';
    }
    echo '</table>';

    echo '<div class="pagination">';
    for ($i = 1; $i <= $total_page; $i++) {
        if ($i == $current_page) { //当前页码不需要超链接
            echo "<span class='active'>{$i}</span>";
        } else {
            echo "<a href='?page={$i}'>{$i}</a>";
        }
    }
    echo '</div>';
  ?>
  1. 查询商品表的数据

商品表包含商品名称、价格、描述等字段信息,我们需要根据用户的关键字进行查询,并且分页显示。该示例需要使用以下mysql语句来创建商品表:

CREATE TABLE `product` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
);

以下是PHP代码实现:

  <?php
  if (isset($_GET['keyword'])) {
    $keyword = mysqli_real_escape_string($_GET['keyword']);

    $db = mysqli_connect('localhost', 'username', 'password', 'dbname');
    mysqli_set_charset($db, 'utf8');

    $sql = "SELECT COUNT(*) as total_count FROM product WHERE name LIKE '%{$keyword}%'";
    $result = mysqli_query($db, $sql);
    $row = mysqli_fetch_assoc($result);
    $total_count = $row['total_count'];
    $page_size = 10; //每页显示的记录数
    $total_page = ceil($total_count / $page_size); //总页数

    if (isset($_GET['page'])) {
        $current_page = $_GET['page'];
    } else {
        $current_page = 1;
    }
    $start_index = ($current_page - 1) * $page_size;
    $end_index = $start_index + $page_size - 1;

    $sql = "SELECT * FROM product WHERE name LIKE '%{$keyword}%' LIMIT {$start_index}, {$page_size}";
    $result = mysqli_query($db, $sql);

    echo '<table>';
    echo '<tr><th>ID</th><th>Name</th><th>Price</th><th>Description</th></tr>';
    while ($row = mysqli_fetch_assoc($result)) {
        echo '<tr><td>' . $row['id'] . '</td><td>' . $row['name'] . '</td><td>' . $row['price'] . '</td><td>' . $row['description'] . '</td></tr>';
    }
    echo '</table>';

    echo '<div class="pagination">';
    for ($i = 1; $i <= $total_page; $i++) {
        if ($i == $current_page) { //当前页码不需要超链接
            echo "<span class='active'>{$i}</span>";
        } else {
            echo "<a href='?keyword={$keyword}&page={$i}'>{$i}</a>";
        }
    }
    echo '</div>';
  }
  ?>

结论

分页功能在Web开发中非常常见,使用PHP和MYSQL实现分页功能也非常简单。本文通过详细讲解分页原理和实现方法,并通过两个示例代码来演示具体的实现步骤,相信可以帮助开发者更好地理解和实现分页功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:默默小谈PHP&MYSQL分页原理及实现 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 学习php设计模式 php实现抽象工厂模式

    学习PHP设计模式是提高自身开发能力并且更好地理解PHP语言的必修课程之一。PHP设计模式是一种利用模板设计的面向对象的编程风格,深度合理地利用面向对象技术,最大化地提高代码的可重用性和可扩展性。 抽象工厂模式是常见的设计模式之一,它可以使得对象的创建在运行时刻进行修改,从而更加灵活地适应更多的运行环境。下面就来简单介绍一下抽象工厂模式的实现,并通过代码示例…

    PHP 2023年5月27日
    00
  • PHP中Socket连接及读写数据超时问题分析

    PHP中Socket连接及读写数据超时问题分析 什么是Socket Socket(套接字)是在应用层和传输层之间的一个抽象层,应用程序通过Socket与操作系统内核交互,使用TCP/IP协议进行网络通信。在PHP中,使用Socket可以轻松实现服务器和客户端的通信。 Socket连接超时问题分析 在PHP中,Socket连接可能会因为各种原因超时,比如网络不…

    PHP 2023年5月26日
    00
  • PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】

    下面是详细讲解“PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】”的完整攻略: preg_match函数简介 PHP中的preg_match函数是一个用于在字符串中进行正则表达式匹配的函数。该函数的语法为preg_match($pattern, $subject, &$matches),其中$pattern表示正则表达式,$…

    PHP 2023年5月26日
    00
  • PHP+MYSQL论坛程序 Discuz v5.5.0 简体中文版分流下载

    PHP+MYSQL论坛程序 Discuz v5.5.0 简体中文版分流下载攻略 简介 Discuz是一个高效的PHP+MYSQL论坛程序,是国内首屈一指的论坛系统之一。Discuz提供了多种功能,包括发帖、回复、私信、积分、签到等等,且具有良好的可扩展性和安全性。本攻略将为您介绍Discuz的分流下载方法。 准备工作 了解Discuz相关知识,包括安装、配置…

    PHP 2023年5月24日
    00
  • php定义数组和使用示例(php数组的定义方法)

    下面就详细讲解一下“PHP定义数组和使用示例(PHP数组的定义方法)”的完整攻略。 什么是PHP数组 PHP数组是一种用于存储一系列值的数据结构。它允许我们将多个值组合在一起,并使用一个键来引用它们。这就是为什么PHP数组也被称为关联数组或哈希表。 定义PHP数组的方法 方式一 使用array()函数定义数组,这是最常见的一种方式。 语法: $array_n…

    PHP 2023年5月25日
    00
  • 浅析php-fpm静态和动态执行方式的比较

    浅析php-fpm静态和动态执行方式的比较 前言 php-fpm 是 PHP 官方针对处理高并发等情况下的替代 FCGI 环境的进程管理器,相较于传统的 php-cgi 方式,php-fpm 众多的优异表现,比如在性能、应对并发、改善 PHP 进程管理等方面。 php-fpm 提供了两种执行方式:静态执行和动态执行。静态方式在 PHP-FPM 启动时,根据 …

    PHP 2023年5月26日
    00
  • PHP有序表查找之插值查找算法示例

    一、概述 PHP有序表查找之插值查找算法是一种优化的二分查找算法,适用于数据分布较为均匀的数组。其原理是通过公式计算出待查找元素在有序表的位置估计值,从而可以缩小查找范围,提高查找效率。 二、算法思路 计算待查找元素在有序表中的位置估计值,公式如下: $$mid=low+\frac{(key-a[low])*(high-low)}{(a[high]-a[lo…

    PHP 2023年5月26日
    00
  • php数组随机排序实现方法

    当我们需要对一个 PHP 数组进行随机排序时,可以使用 shuffle() 函数。shuffle() 函数用于将数组的元素随机排序,打乱数组顺序。 下面是对数组进行随机排序的示例代码: // 定义一个需要排序的数组 $my_array = array("苹果", "香蕉", "葡萄", "…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部