免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5067 | 回复: 6
打印 上一主题 下一主题

pdo分页类2.0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-11 19:42 |只看该作者 |倒序浏览
php5推出的pdo实在是个好东西,以下是本人为了方便数据的分页写的pdo分页类。2.0版本.

  1. <?php
  2. /** 文件: pdo_page.class.php
  3. ** 版本: 2.0
  4. ** 功能: 使用php数据对象(pdo)实现数据的分页显示
  5. ** 运行环境:
  6. **                ① php版本--5.1以上(包括5.1)
  7. **                ② 打开pdo扩展(默认为关闭)
  8. **                ③ 打开与所使用db相应对应的pdo扩展(默认为关闭)
  9. **
  10. ** DISCLAIMER:
  11. ** Distributed "as is", fell free to modify any part of this code.
  12. ** You can use this for any projects you want, commercial or not.
  13. ** It would be very kind to email me any suggestions you have or bugs you
  14. ** might find.
  15. **
  16. ** 完成时间: 2006-10-15
  17. ** Power By 刘胜蛟 (Email: liushengjiao@163.com/liushengjiao@gmail.com)
  18. **/
  19. class pdo_page{
  20. /* 变量定义部分 begin */

  21.         /* pdo数据源 */
  22.         private $db_driver = '';
  23.         private $db_host = '';
  24.         private $db_user = '';
  25.         private $db_password = '';
  26.         private $db_char = '';
  27.         private $db_name = '';
  28.         private $db_table = '';
  29.         private $db_table_field = '';        //要显示的数据库中的字段
  30.         private $db = '';                //数据库连接句柄

  31.         /* 分页显示参数设置 */
  32.         private $page_size = 0;                //每页显示的记录数目
  33.         private $link_num = 0;                //显示页码链接的数目

  34.         private $page = 1;                //页码
  35.         private $records = 0;                //表中记录总数
  36.         private $page_count = 0;        //总页数
  37.         private $pagestring = '';        //前后分页链接字符串
  38.         private $page_link = '';        //页码链接字符串
  39.         private $page_select = '';        //表单跳转页字符串
  40.         private $page_jump = '';        //text筐输入页码跳转

  41. /* 变量定义部分 end */

  42. /* 函数定义(类方法) begin */

  43.         function __construct(){

  44.         }

  45.         /* 设置分页信息 begin */
  46.         public function set($db_driver,
  47.                         $db_host,
  48.                         $db_user,
  49.                         $db_password,
  50.                         $db_name,
  51.                         $db_table,
  52.                         $db_table_field,
  53.                         $page_size,
  54.                         $link_num){
  55.                 /* db参数设置 begin */
  56.                 $this->db_driver = $db_driver;                //db驱动
  57.                 $this->db_host = $db_host;                //dbms地址
  58.                 $this->db_user = $db_user;                //dbms帐户
  59.                 $this->db_password = $db_password;        //dbms密码
  60.                 $this->db_name = $db_name;                //db名称
  61.                 $this->db_table = $db_table;                //表名
  62.                 $this->db_table_field = $db_table_field;//字段数组,
  63.                                                         //将要显示的字段名称
  64.                                                         //写入该数组
  65.                 /* db参数设置 end */

  66.                 /* 分页参数设置 begin */
  67.                 $this->page_size = $page_size;                //每页显示记录的数目
  68.                 $this->link_num = $link_num;                //显示翻页链接的数目
  69.                 /* 分页参数设置 end */
  70.         }
  71.         /* 设置分页信息 end*/
  72.        
  73.         /* 获取分页链接数据 begin */
  74.         public function get(){
  75.                 $page_data[0] = $this->records;                //表中记录的总数
  76.                 $page_data[1] = $this->page_count;        //总页数
  77.                 $page_data[2] = $this->page;                //当前页码
  78.                 $page_data[3] = $this->pagestring;        //'首页'、'上一页'、
  79.                                                         //'下一页'、//'尾页'
  80.                                                         //--链接样式

  81.                 $page_data[4] = $this->page_link;        //[1]、[2]、[3]
  82.                                                         //--链接样式

  83.                 $page_data[5] = $this->page_select;        //表单翻页样式
  84.                 $page_data[6] = $this->page_jump;        //跳转的指定页样式
  85.                 return $page_data;
  86.         }
  87.         /* 获取分页链接数据 end */

  88.         /* 连接数据库 begin */
  89.         private function db_conn(){
  90.                 try{
  91.                         $this->db = new pdo(
  92.                                 "$this->db_driver:dbname=$this->db_name;
  93.                                 host=$this->db_host;charset=$this->db_char",
  94.                                 "$this->db_user",
  95.                                 "$this->db_password"
  96.                         );
  97.                         return $this->db;
  98.                 } catch(pdoexception $e) {
  99.                         die($e->getmessage());
  100.                 }
  101.         }
  102.         /* 连接数据库 end */

  103.         /* 页码处理 begin */
  104.         private function set_page(){
  105.                 if (isset($_REQUEST['page'])) {
  106.                         $this->page = intval($_REQUEST['page']);
  107.                 } else {
  108.                         $this->page = 1;
  109.                 }
  110.         }
  111.         /* 页码处理 end */

  112.         /* 获取db中记录的数目 begin */
  113.         private function get_records(){
  114.                 $sql = "select count(*) from $this->db_table";
  115.                 $stmt = $this->db->prepare($sql);
  116.                 $stmt->execute();
  117.                 while ($f = $stmt->fetch()) {
  118.                         $this->records = $f[0];
  119.                 }
  120.         }
  121.         /* 获取db中记录的数目 end */

  122.         /* 建立翻页链接字符串 begin */
  123.         private function page_link(){
  124.                 /* 前后页链接字符串 begin */
  125.                 if ($this->page == 1) {
  126.                         //首页,无链接
  127.                         $this->pagestring .='第一页|上一页';
  128.                 } else {
  129.                         //不为首页,有链接
  130.                         $this->pagestring .='<a href=?page=1>第一页</a>|
  131.                         <a href=?page='.($this->page-1).'>上一页</a>';
  132.                        
  133.                 }
  134.                 if ($this->page==$this->page_count || $this->page_count==0) {
  135.                         //末页,无链接
  136.                         $this->pagestring .='下一页|尾页';
  137.                 } else {
  138.                         //非末页,有链接
  139.                         $this->pagestring .='<a href=?page='.($this->page+1).'>
  140.                         下一页</a>|<a href=?page='.$this->page_count.'>尾页</a>';
  141.                 }
  142.                 /* 前后页链接字符串 end */

  143.                 /* 页码链接字符串 begin */
  144.                 for ($i=$this->page;$i<=$this->page+$this->link_num-1;$i++) {
  145.                         if ($i<=$this->page_count) {
  146.                                 $this->page_link .= '<a href=?page='.$i.'>
  147.                                 ['.$i.']</a> ';
  148.                                 $last_page = $i;
  149.                         }
  150.                 }
  151.                 if ($i-$this->link_num-1 < 1) {
  152.                                 $front_page = 1;
  153.                 } else {
  154.                                 $front_page = $i - $this->link_num - 1;
  155.                 }
  156.                 if ($last_page == $this->page_count) {
  157.                                 $back_page = $last_page;
  158.                 } else {
  159.                                 $back_page = $last_page+1;
  160.                 }
  161.                 $this->page_link = '<a href=?page='.$front_page.'><<</a>'.' '.
  162.                         $this->page_link.' '.'<a href=?page='.$back_page.'>>>
  163.                         </a>';
  164.                 /* 页码链接字符串 end */

  165.                 /* select页码 begin */
  166.                 $this->page_select = "<form action='' method=post>
  167.                         <select name=page>";
  168.                 for ($i = 1;$i <= $this->page_count;$i++) {
  169.                         if ($i == $this->page) {
  170.                                 $this->page_select .= "<option selected>$i
  171.                                 </option>";
  172.                         } else {
  173.                                 $this->page_select .= "<option>$i</option>";
  174.                         }
  175.                 }
  176.                 $this->page_select .= "</select><input type=submit value=go>
  177.                         </form>";
  178.                 /* select页码 end */

  179.                 /* input跳转表单begin */
  180.                 $this->page_jump = "<form action='' method=post><input
  181.                         type=text size=1 name=page value=$this->page><input
  182.                         type=submit value=go>";
  183.                 /* input跳转表单end */

  184.         }
  185.         /* 建立翻页链接字符串 end */

  186.         /* 获取数据 begin */
  187.         function fetch_data(){
  188.                 if ($this->records) {
  189.                         $sql = "select * from $this->db_table limit ".($this->page-1)*$this->page_size.",$this->page_size";
  190.                         $stmt = $this->db->prepare($sql);
  191.                         $stmt->execute();
  192.                         echo "<center><table border=1 width=60%><tr>";
  193.                         /* 取字段名称 begin */
  194.                         $field_count = count($this->db_table_field);
  195.                         for($i = 0;$i < $field_count;$i++){
  196.                                 $field_name = $this->db_table_field[$i];
  197.                                 echo "<td><center><b>$field_name</b></center>
  198.                                         </td>";
  199.                         }
  200.                         echo "</tr>";
  201.                         /* 取字段名称 end */
  202.                         /* 获取数据 begin */
  203.                         while($f = $stmt->fetch()){
  204.                                 echo "<tr>";
  205.                                 for($i = 0;$i < $field_count;$i++){
  206.                                         $field_name = $this->db_table_field[$i];
  207.                                         $field_value = $f["$field_name"];
  208.                                         echo "<td><center>$field_value</center>
  209.                                                 </td>";
  210.                                 }
  211.                                 echo "</tr>";
  212.                         }
  213.                         /* 获取数据 end */
  214.                         echo "</table></center>";
  215.                 }
  216.         }
  217.         /* 获取数据 end */

  218.         /* 建立分页 begin */
  219.         public function create_page(){
  220.                 $this->db_conn();
  221.                 $this->set_page();
  222.                 $this->get_records();
  223.                 $this->page_count = ceil($this->records/$this->page_size);
  224.                 $this->page_link();
  225.                 $this->fetch_data();
  226.         }
  227.         /* 建立分页 end */

  228.         function __destruct(){

  229.         }
  230. /* 函数定义(类方法) end */
  231. }


  232. ///////////////////////////////////////////////////////////////////////////////
  233. /////////////////////////////////example///////////////////////////////////////
  234. /*step1: 建立分页对象
  235. *new pdo_page;
  236. */
  237. $page = new pdo_page;

  238. /*step2: 设置分页参数
  239. *
  240. *⑴设置数据库信息
  241. *pdo_page->set($db_driver,
  242. *                $db_host,
  243. *                $db_user,
  244. *                $db_password,
  245. *                $db_name,
  246. *                $db_table,
  247. *                $db_table_field,
  248. *                $page_size,
  249. *                $link_num);
  250. *参数说明:
  251. *$db_driver--db驱动
  252. *$db_host--dbms地址
  253. *$db_user--dbms帐户
  254. *$db_password--dbms密码
  255. *$db_name--db名称
  256. *$db_table--表名
  257. *$db_table_field--字段数组,将要显示的字段名称写入该数组
  258. *
  259. *⑵设置分页信息
  260. *$page_size--每页显示记录的数目
  261. *$link_num--显示翻页链接的数目
  262. */
  263. $page->set('mysql',
  264.         'localhost',
  265.         'root',
  266.         'goldfish',
  267.         'goldfish',
  268.         'goldfish',
  269.         array('id','name','age'),
  270.         2,
  271.         3);

  272. /*step3: 生成分页
  273. *pdo_page->create_page();
  274. */
  275. $page->create_page();

  276. /*step4: 获取分页数据
  277. *pdo_page->get();
  278. *page_data[0]: 表中记录的总数
  279. *page_data[1]: 总页数
  280. *page_data[2]: 当前页码
  281. *page_data[3]: pagestring,'首页'、'上一页'、'下一页'、'尾页'--链接样式
  282. *page_data[4]: page_link,[1]、[2]、[3]--链接样式
  283. *page_data[5]: page_select,表单翻页样式
  284. *page_data[6]: page_jump,跳转的指定页
  285. */
  286. $page_data = $page->get();

  287. /*step5: 输出分页信息
  288. *翻页链接显示输出begin
  289. */
  290.         echo '<center>共有'.$page_data[0].'条记录';        //表中记录的总数
  291.         echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
  292.         echo '第'.$page_data[2].'页/';
  293.         echo '共'.$page_data[1].'页</center>';                //总页数

  294.         echo '<center>'.$page_data[3].'</center>';        //'首页'、'上一页'、
  295.                                                         //'下一页'、'尾页'
  296.                                                         //--链接样式

  297.         echo '<center>'.$page_data[4].'</center>';        //[1]、[2]、[3]
  298.                                                         //--链接样式

  299.         echo '<center>'.$page_data[5].'</center>';        //表单翻页样式
  300.         echo '<center>'.$page_data[6].'</center>';        //跳转的指定页

  301. ?>
复制代码

论坛徽章:
0
2 [报告]
发表于 2006-11-11 19:43 |只看该作者
pdo怎么好啊。。说来听听

论坛徽章:
0
3 [报告]
发表于 2006-11-11 22:45 |只看该作者
最主要是安全

论坛徽章:
0
4 [报告]
发表于 2006-11-11 23:08 |只看该作者
楼上群满员了

论坛徽章:
0
5 [报告]
发表于 2006-11-12 08:42 |只看该作者
PDO不稳定。我用的结果。现在接口全改成MYSQLI了

论坛徽章:
0
6 [报告]
发表于 2006-11-16 16:13 |只看该作者
怎么个不稳定法?

论坛徽章:
0
7 [报告]
发表于 2006-11-17 09:14 |只看该作者
不喜欢结合sql语句的分页...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP