博客列表 >PHP PDO 数据查询分页

PHP PDO 数据查询分页

hanyufeng的博客
hanyufeng的博客原创
2018年01月07日 11:51:411573浏览

说明:

沿用“PHP PDO 数据查询、删除实例”(http://hanyufeng.php.cn/blog/detail/2180)的代码,实现了分页显示。

运行效果:

L30.png

要点:

  • 分页记录起始位置的计算

  • 分页数的计算

  • 无分页参数或为0时的处理

  • 上一页、下一页为首页、尾页时的处理


示例源码:

<?php
$pageTitle = '用户信息列表';
include  'inc/header.php';

//连接数据库
require 'inc/connect.php';

$page = $_GET['page'];
$page = ($page == 0 ) ? 1 : $page;//处理无page参数或为0的情况
//参数初始化
$totalNum =  0;//记录总数
$pageNum = 10;//设定每页数量
$pageCount = 0;//分页总数
$offset =  $pageNum *  ($page-1);//startIndex

//查询用户信息表user
$sql = "SELECT `id`,`name`,`email` FROM user limit $offset,$pageNum";  //创建查询语句
$rows = [];  //创建查询结果容器,初始为空数组,该数组最终会成为一个二维数组,与数组表对应
try
{
    $pdo_stmt = $pdo->query($sql);//查询
    if ($pdo_stmt->rowCount() > 0) {//如果数据不为空
        $i =0;
        while ($row = $pdo_stmt->fetch()) { //从结果集的第一条记录开始抓取数据到绑定的变量中
            //继续沿用$rows数组保存数据,以便重复使用输出数据到页面的代码
            $rows[$i] = ['id'=>$row['id'],'name'=>$row['name'],'email'=>$row['email']];
            $i++;
        }
    }
    else
    {
        echo '<p style="color:red">当前表中没有数据~~</p>';
    }
} catch (PDOException $e) {
    echo '<p>查询失败:'.$e->getMessage().'</p>';
}
?>

<!--创建表格用来展示用户数据-->
<!--<div class="container">-->
    <div class="row">
        <div class="col-md-12 text-center">
            <h3>用户信息表</h3>
            <table class="table table-bordered">
                <tr class="h5 bg-info">
<!--                    <td>ID</td><td>姓名</td><td>邮箱</td>-->
                    <td>ID</td><td>姓名</td><td>邮箱</td><td>操作</td>
                </tr>
<!--
1.下面循环输出用户信息,用foreach()的替代语法,请尽快熟悉这种写法,以后写模板就靠这个玩意了
    2. 替代语法的目标就是一个: 干掉php代码中的大括号,因为html与php混写的时候,不断的切换会有很多大括号
    3. 过多的大括号,即不利于代码整洁,也容易出错,不利于代码维护
-->
<?php foreach ($rows as $row) : ?>
    <tr>
        <td><?php echo $row['id'] ?></td>
        <td><?php echo $row['name'] ?></td>
        <td><?php echo $row['email'] ?></td>
        <!-- 添加编辑和删除操作时,用链接式的按钮更合适-->
        <td>
            <a class="btn btn-success" href="view.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">详细</a>
            <a class="btn btn-primary" href="edit.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">编辑</a>
            <a id="delete" class="btn btn-danger"  href="delete.php?id=<?php echo $row['id'] ?>" target="_blank" role="button">删除</a>
        </td>
    </tr>
<?php endforeach;?>
    </table>
    </div>
    </div>
    <!--</div>-->

    <nav aria-label="Page navigation" class="text-center">
        <ul class="pagination">
<?php
$sql = "SELECT count(*) as total FROM user";
$pdo_stmt = $pdo->query($sql);//查询
//获取总数
$totalNum =  $pdo_stmt->fetch()['total'];
$pageCount = ceil($totalNum/$pageNum);//进一法取整

if($pageCount >1){ //>1 才开始分页
    echo '<li>
    <a href="?page='.($page==1?1:$page-1).'" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
    </a></li>';

    for($i=1; $i<=$pageCount; $i++){
        if($page == $i){
            echo '<li class="active"><a href="?page='.$i.'">'.$i.'</a></li>';
        } else{
            echo '<li><a href="?page='.$i.'">'.$i.'</a></li>';
        }
    }
    //尾页
//    echo '<li><a href="#">'.$pageCount.'</a></li>';
    echo '<li>
    <a href="?page='.($page==$pageCount?$pageCount:$page+1).'" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
    </a>
</li>';
}

?>
        </ul>
    </nav>


    <div class="row">
        <div class="col-md-12 text-right">
            <a class="btn btn-info btn-lg"  href="register.php" role="button">新建</a>
            <p></p>
        </div>
    </div>

    <!--输出页尾-->
<?php include 'inc/footer.php' ?>


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议