php怎么实现查询分页显示功能
时间:2023-04-24 15:14
在进行数据库查询时,在一些情况下,我们需要将结果按照一定的规则进行分页显示。比如,当我们想让客户端的每一页只展示少量的数据时,在实现页面效果的同时,我们需要使用查询分页显示功能。本文将聚焦PHP开发语言的查询分页功能,通过实例介绍它的实现原理和步骤。 查询分页显示的实现原理 查询分页显示的实现原理很简单,我们可以把查询到的所有数据按照一定的规则进行排序,然后通过限制每页数据显示的数量,将查询结果进行分页显示。我们可以通过算法计算出需要显示的记录从数据库中的哪一条开始,到哪一条为止。 主要步骤如下: 1.计算总记录数:通常情况下,我们需要查询出数据库中所有的记录,也即总记录数。 2.计算总页数:通过总记录数和每页显示记录数的比对,可以算出总页数。如果总页数除以每页显示记录数得到的余数不为零,则总页数需要加一。 3.查询当前页的数据:计算出当前页的需要查询的记录的开始和结束位置,然后使用SQL语句查询数据。不过这里的SQL语句需要进行一些改造,不能仅是简单地查询全部记录,而是需要增加查询条件和限制查询结果的数量。 4.分页显示:通过页面分页组件,可以方便的进行分页显示。通常情况下,分页组件会将总记录数、当前页数、总页数等信息进行展示。同时,还可以通过点击不同的页数来实现不同页的数据查询和显示。 代码实现 为了实现这些步骤,我们需要使用一个PHP函数来进行分页的处理。通常情况下,这个函数需要接收一些必要的参数,例如总记录数、每页显示记录数、当前页数等。以Mysql数据库为例,下面是常见的一个PHP分页函数: 上面的函数主要实现了根据每页展示数、总记录数以及当前页数来查询并返回需要展示的数据的功能。接下来,我们将和您一起实现一个包含分页功能的PHP查询页面。 首先,我们需要构造一个数据源,这里我们使用一个简单的students表 (其字段包括id、name、gender、age): 然后将数据插入到students表中: 我们需要实现以下3个文件: 内容如下: index.php: page.class.php: db.class.php: 分页代码的执行步骤如下: 运行index.php文件之后,我们会看到一个分页展示的页面,它会按照我们预期的方式进行每页展示数量、页码列表和展示结果的准确性。 以上就是php怎么实现查询分页显示功能的详细内容,更多请关注Gxl网其它相关文章!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;}
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;
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);
<!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>
<?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}"; //查询限制语句 }}
<?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(); }}