博主信息
博文 34
粉丝 0
评论 1
访问量 29120
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
分页查询原理与类封装—2018年9月10日23时45分
感恩的心的博客
原创
860人浏览过

1问答:分页查询的原理与偏移量的计算方法

(1)LIMIT 参数的作用: 偏移量offset与显示数量pageSize

(2) 控制每页显示的数量pageSize

(3) 接收GET参数,用p表示当前页数
(4) 需要的参数:
1).totalPage 总页数
2).totalNumber 一共有多少条数据
3).pageSize 每页显示多少条数据
4)currentPage 当前第几页
当前偏移量的计算公式: (页数-1)*每页显示的数量
offset = (currentPage-1)*pageSize

2、编程: 实现分页查询,要求有上一下,下一页,直接跳到首页和尾页,中间页的生成,以及快速页码跳转功能

(1)类封装

实例

<?php
//查询分页类

namespace model;
class Page{
    //查询起始偏移量
    private $offset;
    //每页记录数
    private $pageNum;    
    //数据库连接对象
    private $pdo=null;
    //构造方法
    public function __construct($num=3) {
        $this->pageNum=$num;
        $this->offset= ($this->getNum()-1)*$this->pageNum;
    }


    //连接数据库
    public function connect($type,$host,$dbname,$user,$pass){
         try {
            $this->pdo = new \PDO("{$type}:host={$host};dbname={$dbname}", $user, $pass);
        } catch (\PDOException $e) {
            echo $e->getMessage();
        }      
       
    }

    //获取当前页码
    public function getNum(){
        return isset($_GET['p'])?$_GET['p']:1;
    }
    
    //获取总页数
    public function getTotalNum($table){
        //$stmt= $this->pdo->prepare("SELECT COUNT(*) FROM `{$table}`");
        $stmt = $this->pdo->prepare("SELECT COUNT(*) FROM `{$table}` ");
        $stmt->execute();
        
        $total=$stmt->fetchColumn(0);
        return ceil($total/$this->pageNum);
        
    }

    //获取分页数据
    public function getCurrentPage($table) {
        $sql="SELECT *FROM {$table} LIMIT {$this->offset},{$this->pageNum}";
        $stmt= $this->pdo->prepare($sql);
        $stmt->execute();

        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

}

运行实例 »

点击 "运行实例" 按钮查看在线实例



(2)分页查询

实例

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
        <link rel="stylesheet" href="./inc/style.css"/>
	<title>手工分页查询</title>
</head>
<body>
<?php
   require 'inc/Page.php';
   use model\Page;
   define('JUMP_URL',basename($_SERVER['PHP_SELF']));


$page=new Page(4);
   //连接数据库
   $page->connect("mysql", "127.0.0.1", "php", "root", "root123");

    //获取当前页
   $currentPage=$page->getNum();

    //获取总页数
    $totalNum=$page->getTotalNum("staff");

    //获取分页数据
    $data=$page->getCurrentPage("staff");
?>
    
    <table>
        <caption>信息</caption>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>性别</th>
            <th>数字</th>        
        </tr>
        <?php foreach ($data as $rows):?>
        <tr>
        <th><?php echo $rows['staff_id']?></th>
        <th><?php echo $rows['name']?></th>
        <th><?php echo $rows['age'] ?></th>
        <th><?php echo $rows['sex'] ?></th>
        <th><?php echo $rows['salary'] ?></th>
        </tr>
 
        
        <?php endforeach;?>
    </table>
 
    <h3>
        <!--上一页-->
        <?php if($currentPage!=1):?>
        <a href="./<?php echo JUMP_URL; ?>?p=1">首页</a>
        <a href="./<?php echo JUMP_URL; ?>?p=<?php 
               echo ($currentPage>1) ? ($currentPage - 1) : 1;
               ?>">上一页</a>
        <?php endif; ?>
        
        <!--生成中间页码-->
        <?php for($i=1;$i<=$totalNum;$i++): ?>
        <a class="<?php if($i==$currentPage)echo 'active'; ?>"
            href="./<?php echo JUMP_URL; ?>?p=<?php echo $i ?>"> <?php echo $i?></a>
        <?php endfor?>
        
        <!--下一页-->
        <?php if ($currentPage != $totalNum): ?>
        <a href="./<?php echo JUMP_URL; ?>?p=<?php echo $totalNum; ?>">尾页</a>
            <a href="./<?php echo JUMP_URL; ?>?p=<?php
            echo ($currentPage+1)<=$totalNum?($currentPage+1): $currentPage; 
            ?>">下一页</a>
        <?php endif; ?>
        
        <form action="" method="get">
            <select name="p" id="">
                <?php for($i=1;$i<=$totalNum;$i++): ?>
                <option value="<?php echo $i;?>"><?php echo $i; ?></option>                
                <?php endfor; ?>              
                
            </select>
            
            <button>跳转</button> 
            
        </form>
    </h3>

</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

 

本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学