18.8  设计完美分页类

数据记录列表几乎出现在Web项目的每个模块中,假设一张表中有十几万条记录,我们不可能一次全都显示出来,当然也不能仅显示几十条。为了解决这样的矛盾,通常在读取时设置以分页的形式显示数据,这样阅读起来既方便又美观。分页的设计不仅可以让用户读取表中的所有数据,而且每次只从数据库服务器中读取一点点数据,既能提高数据库的反应速度,又能提高页面加载速度,所以说,分页程序是Web开发的一个重要组成部分。本节完美分页类的设计,目的就是让读者能通过最简单的方法来使用功能强大的分页程序。对于基础薄弱的读者,只要求会使用本类即可;而对一些喜欢挑战的读者,可以尝试去读懂它,并开发一个属于自己的分页类。

18.8.1  需求分析

要求自定义分页类,在达到使用简便的前提下,又可以完成以下几项功能:

Ø 提供比较全面的分页信息(包括记录总数、当前页显示条数和记录的起始到结束的位置、总页数和当前页码,以及首页、上一页、下一页和尾页的设置,还有通过页码列表和指定跳转的页面设置)。

Ø 可以对分页的输出信息内容进行设置。

Ø 可以有选择地显示分页信息,以及对显示的分页信息顺序进行调整。

Ø 可以设置在跳转至其他页的同时,能将本页的一些数据参数传递过去。

Ø 可以设置默认显示第一页还是最后一页。

Ø 可以使用LIMIT从句来设置SQL语句,用于限制从数据库获取的记录条数。

说明:需要考虑分页时的一些特殊情况,例如,没有数据记录时、只有一页数据时、当前页为第一页时,以及当前页为最后一页时等。

18.8.2  程序设计

设计一个分页程序至少需要4个重要条件:

Ø 数据表中的总记录数。

Ø 每页显示的记录条数。

Ø 为分页程序提供当前页。

Ø 访问其他页面请求的URL。

根据分页程序的需求,我们可以为分页类声明一个构造方法和两个可见的成员方法,以及两个可见的成员属性。构造方法用于为分页程序的属性提供必要的值,包括数据表的总记录数、每页显示的记录条数、页面跳转的参数传递,以及默认页面显示。其中,当前页码可以直接在程序中通过$_GET获取,不用手动传递。并且访问其他页面请求的URL也可以通过程序自动获取,也不需要手动进行传递。分页类中设计的3个可见的成员方法如表18-6所示,分页类中可见的两个成员属性如表18-7所示。

表18-6  分页类中设计的3个可见的成员方法

表18-7  分页类中可见的两个成员属性

《细说PHP》第四版 样章 第18章 数据库抽象层PDO 10的更多相关文章

  1. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 1

    现在,如果你已经能熟练地使用MySQL客户端软件来操作数据库中的数据,就可以开始学习如何使用PHP来显示和修改数据库中的数据了.PHP提供了标准的函数来操作数据库.在PHP 5以上的版本中可以使用My ...

  2. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 12

    18.9  管理表books实例 在Web项目中,几乎所有模块都要和数据表打交道,而对表的管理无非就是增.删.改.查等操作,所以熟练掌握对表进行管理的这些常见操作是十分有必的.本例为了能更好地展示PD ...

  3. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 11

    18.8.3  完美分页类的代码实现 分页类的编写除了需要使用在18.8.2节中提供的可以操作的3个成员方法,还需要更多的成员,但其他的成员方法和成员属性只需要内部使用,并不需要用户在对象外部操作,所 ...

  4. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7

    18.6  PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...

  5. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 4

    18.4  创建PDO对象 使用PDO在与不同数据库管理系统之间交互时,PDO对象中的成员的方法是统一各种数据库的访问接口,所以在使用PDO与数据库交互之前,首先要创建一个PDO对象.在通过构造方法创 ...

  6. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 9

    18.7  PDO的事务处理 事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作.如果组中的所有SQL语句都操作成功,则认为事务成功,那么事务被提交,其修改将作用于所 ...

  7. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8-1

    18.6.5  获取数据 PDO的数据获取方法与其他数据库扩展非常类似,只要成功执行SELECT查询,都会有结果集对象生成.不管使用PDO对象中的query()方法,还是使用prepare()和exe ...

  8. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 8

    18.6.4  执行准备好的查询 当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了.在下面的示例中,向前面 ...

  9. 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 6

    18.5.3  PDO的错误处理模式 PDO共提供了3种不同的错误处理模式,不仅可以满足不同风格的编程,也可以调整扩展处理错误的方式. 1.PDO::ERRMODE_SILENT 这是默认模式,在错误 ...

随机推荐

  1. python 基础学习笔记(7)--迭送器

    **函数名的运用** - [ ] 函数名是一个变量, 但它是一个特殊的变量, 与括号配合可以执行函数的变量 **函数名的内存地址** ```  def func():  print('666')  p ...

  2. Linux系统学习 二十一、SAMBA服务—相关文件、配置文件详解

    3.相关文件 常用文件: /etc/samba/smb.conf      #配置文件 /etc/samba/lmhosts        #对应NetBIOS名与主机的IP的文件,一般Samba会自 ...

  3. [译]Vulkan教程(30)深度缓存

    [译]Vulkan教程(30)深度缓存 Depth buffering 深度缓存 Introduction 入门 The geometry we've worked with so far is pr ...

  4. 【RTOS】基于V7开发板的RTX5和FreeRTOS带CMSIS-RTOS V2封装层的模板例程下载,AC6和AC5两个版本

    说明: 1.使用MDK的RTE环境开发RTX5和FreeRTOS,简单易移植,统一采用CMSIS-RTOS V2封装层. 2.DTCM是H7里面性能最高的RAM,主频400MHz,跟内核速度一样,所以 ...

  5. 【一起刷LeetCode】在未排序的数组中找到第 k 个最大的元素

    题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...

  6. 解决spark dataframe get 报空指针异常 java.lang.NullPointerException

    Spark 编程读取hive,hbase, 文本等外部数据生成dataframe后,一般我们都会map遍历get数据的每个字段,此时如果原始数据为null时,如果不进行判断直接转化为string,就会 ...

  7. three.js通过canvas实现球体世界平面地图

    概况如下: 1.SphereGeometry实现自转的地球: 2.THREE.CatmullRomCurve3实现球体线条地图点确定: 3.THREE.Math.degToRad,Math.sin,M ...

  8. ASP.NET Core Web 应用程序开发期间部署到IIS自定义主机域名并附加到进程调试

    想必大家之前在进行ASP.NET Web 应用程序开发期间都有用到过将我们的网站部署到IIS自定义主机域名并附加到进程进行调试. 那我们的ASP.NET Core Web 应用程序又是如何部署到我们的 ...

  9. Python进程池multiprocessing.Pool的用法

    一.multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象,multiprocessing模块像线程一样管理进程,这个是multiproce ...

  10. Eclipse 的快捷键

    1. 代码折叠的快捷键,默认是: Ctrl+Shift+Numpad_Divede(小键盘的/号) Ctrl+Shift+Numpad_Multiply(小键盘的*号) 2.删除一行:Ctrl+D 3 ...