您的位置:首页 > 技术中心 > PHP教程 >

php怎么实现查询分页显示功能

时间:2023-04-24 15:14

在进行数据库查询时,在一些情况下,我们需要将结果按照一定的规则进行分页显示。比如,当我们想让客户端的每一页只展示少量的数据时,在实现页面效果的同时,我们需要使用查询分页显示功能。本文将聚焦PHP开发语言的查询分页功能,通过实例介绍它的实现原理和步骤。

查询分页显示的实现原理

查询分页显示的实现原理很简单,我们可以把查询到的所有数据按照一定的规则进行排序,然后通过限制每页数据显示的数量,将查询结果进行分页显示。我们可以通过算法计算出需要显示的记录从数据库中的哪一条开始,到哪一条为止。

主要步骤如下:

1.计算总记录数:通常情况下,我们需要查询出数据库中所有的记录,也即总记录数。

2.计算总页数:通过总记录数和每页显示记录数的比对,可以算出总页数。如果总页数除以每页显示记录数得到的余数不为零,则总页数需要加一。

3.查询当前页的数据:计算出当前页的需要查询的记录的开始和结束位置,然后使用SQL语句查询数据。不过这里的SQL语句需要进行一些改造,不能仅是简单地查询全部记录,而是需要增加查询条件和限制查询结果的数量。

4.分页显示:通过页面分页组件,可以方便的进行分页显示。通常情况下,分页组件会将总记录数、当前页数、总页数等信息进行展示。同时,还可以通过点击不同的页数来实现不同页的数据查询和显示。

代码实现

为了实现这些步骤,我们需要使用一个PHP函数来进行分页的处理。通常情况下,这个函数需要接收一些必要的参数,例如总记录数、每页显示记录数、当前页数等。以Mysql数据库为例,下面是常见的一个PHP分页函数:

function get_data($page_size,$sql,$conn){  global $start;  if(!$page_size) $page_size = 10;  $page = $_GET['page']?$_GET['page']:1;  $start=($page-1)*$page_size; //这里是高亮应用,可以注释掉  $sql_limit = $sql." limit $start,$page_size"; //组合成一条完整的sql语句  $result = mysql_query($sql_limit,$conn);  while($row = mysql_fetch_array($result)){      $data[] = $row;  }  return $data;}

上面的函数主要实现了根据每页展示数、总记录数以及当前页数来查询并返回需要展示的数据的功能。接下来,我们将和您一起实现一个包含分页功能的PHP查询页面。

首先,我们需要构造一个数据源,这里我们使用一个简单的students表 (其字段包括id、name、gender、age):

CREATE TABLE `students` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(32) NOT NULL,  `gender` enum('male','female') NOT NULL,  `age` int(11) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后将数据插入到students表中:

INSERT INTO `students` (`id`, `name`, `gender`, `age`) VALUES(1, 'Tom', 'male', 19),(2, 'Lucy', 'female', 20),(3, 'Lily', 'female', 18),(4, 'Kevin', 'male', 19),(5, 'Steve', 'male', 21),(6, 'Tony', 'male', 20),(7, 'Henry', 'male', 20),(8, 'Alex', 'male', 18),(9, 'Sara', 'female', 21),(10, 'Lily', 'female', 20),(11, 'Michael', 'male', 19),(12, 'Paul', 'male', 22),(13, 'Elena', 'female', 18),(14, 'Jack', 'male', 21),(15, 'Bob', 'male', 19),(16, 'Sophie', 'female', 20),(17, 'Lisa', 'female', 21),(18, 'Lucas', 'male', 19),(19, 'Laura', 'female', 18),(20, 'John', 'male', 20);

我们需要实现以下3个文件:

  1. index.php,该文件是分页过程的实际载体,需要将处理分页过程的函数进行调用,并根据函数的返回值进行数据输出。
  2. page.class.php,这个类主要实现了分页的功能,包括在定义分页对象时需要传入的参数和计算分页相关的核心功能。
  3. db.class.php,这个类主要是用来封装和管理与数据库相关的操作。

内容如下:

index.php:

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>PHP分页查询 - 测试页面</title></head><body>    <?php        include("db.class.php"); //加载数据库操作类        include("page.class.php"); //加载分页类        $page = new page(); //初始化分页类        $db = new db("localhost","root","","test","$conn"); //连接数据库        $count = $db->query("SELECT count(*) FROM students"); //查询总记录数        $page->get_page($count,10); //调用分页方法,传入总记录数和每页显示记录数        $genders = array("male"=>"男性","female"=>"女性");        $results = $db->query("SELECT * FROM students {$page->limit}"); //获取当前页数据        foreach($results as $row){ //遍历数据并渲染页面            $gender = $genders[$row["gender"]];            echo $row["id"]." ".$row["name"]." ".$gender." ".$row["age"]."<br/>";        }        echo $page->display_pages(); //渲染分页组件    ?></body></html>

page.class.php:

<?php/** * PHP分页类 */class page {    public $total = 0; //总记录数    public $page_size = 10; //每页显示的记录数    public $cur_page = 1; //当前页数    public $cur_offset = 0; //当前偏移量    public $total_page = 0; //总页数    public $limit = "";//分页查询限制语句    public function __construct(){        $this->cur_page = isset($_GET['page'])? intval($_GET['page']):1; //获取当前页,默认为第一页    }    /**     * 生成分页显示代码     */    public function display_pages(){        $page_list = "";        $url_s = $_SERVER['REQUEST_URI'] . (strpos($_SERVER['REQUEST_URI'], '?')?'':"?")."&page=";        //上一页        if($this->cur_page>1){            $page_list.="<a href='{$url_s}1'>首页</a>";            $page_list.="<a href='{$url_s}".($this->cur_page-1)."'>上一页</a>";        }        //数字页码        for($i=1;$i<=$this->total_page;$i++){            if($i==$this->cur_page){                $page_list.="<span class='current'>".$i."</span>";            } else {                $page_list.="<a href='{$url_s}{$i}'>$i</a>";            }        }        //下一页        if($this->cur_page<$this->total_page){            $page_list.="<a href='{$url_s}".($this->cur_page+1)."'>下一页</a>";            $page_list.="<a href='{$url_s}{$this->total_page}'>尾页</a>";        }        $page_list.="共{$this->total_page}页,";        $page_list.="<form method='' action=''><input type='text' size='1' name='page'/><input type='submit' value='跳转'/></form>";        return $page_list;    }    /**     * 计算分页相关参数     * @param int $count 总记录数     * @param int $page_size 每页显示记录数     */    public function get_page($count,$page_size){        $this->total = intval($count); //总记录数        $this->page_size = intval($page_size); //每页显示多少条        $this->total_page = ceil($this->total/$this->page_size); //总页数        $this->cur_page = min($this->total_page,max(1,intval($this->cur_page))); //当前页码        $this->cur_offset = ($this->cur_page-1)*$this->page_size; //当前查询的偏移量        $this->limit = " LIMIT {$this->cur_offset},{$this->page_size}"; //查询限制语句    }}

db.class.php:

<?php/** * 数据库操作类 */class db {    private $conn;    public function __construct($db_host,$db_user,$db_pass,$db_name){        $this->conn = new mysqli($db_host,$db_user,$db_pass,$db_name);        if(mysqli_connect_errno()) {            exit("连接数据库失败!");        }        $this->conn->query("SET NAMES 'utf8'");    }    /**     * mysql查询     */    public function query($sql){        $results = array();        $query = $this->conn->query($sql);        if(!$query) return false;        while($row = $query->fetch_array(MYSQLI_ASSOC)){            $results[] = $row;        }        return $results;    }    public function __destruct(){        $this->conn->close();    }}

分页代码的执行步骤如下:

  1. 首先,我们需要调用db.class.php,建立到数据库的连接;
  2. 通过query()方法查询总的记录条数;
  3. 调用get_page()方法,预先计算需要展示的页面的总数,并定义限制查询语句中限制数量和查询的开始点的值limit;
  4. 通过使用渲染函数display_pages()进行分页显示组件的渲染。

运行index.php文件之后,我们会看到一个分页展示的页面,它会按照我们预期的方式进行每页展示数量、页码列表和展示结果的准确性。

以上就是php怎么实现查询分页显示功能的详细内容,更多请关注Gxl网其它相关文章!

热门排行

今日推荐

热门手游