加入收藏 | 设为首页 | 会员中心 | 我要投稿 盐城站长网 (https://www.0515zz.cn/)- 运维、云管理、管理运维、智能数字人、AI硬件!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP实现的oracle分页函数实例

发布时间:2022-07-22 09:42:57 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP实现的oracle分页函数,结合实例形式分析了PHP针对oracle数据库使用rownum代替MySQL中limit实现的分页操作相关技巧,需要的朋友可以参考下 本文实例讲述了PHP实现的oracle分页函数,分享给大家供大家参考,具体如下: mysql有limit,分页
  这篇文章主要介绍了PHP实现的oracle分页函数,结合实例形式分析了PHP针对oracle数据库使用rownum代替MySQL中limit实现的分页操作相关技巧,需要的朋友可以参考下
 
  本文实例讲述了PHP实现的oracle分页函数,分享给大家供大家参考,具体如下:
 
  mysql有limit,分页的时候,我们可以用limit 30,40,而oracle没有limit,用其他的方法来代替--rownum.
 
  一、底层方法
 
  /**
   * 数据连接
   */
  function connect($db_user, $db_pwd, $db_name, $db_nls)
  {
   $this->dbh = oci_connect($db_user, $db_pwd, $db_name, $db_nls);
  }
  function getall($query, $start=0, $rows=-1)
  {
   $this->dbh = emptyempty($this->dbh) ? $this->connect() : $this->dbh;
   $this->sth = oci_parse($this->dbh, $query);
   oci_execute($this->sth, OCI_DEFAULT) or $this->error($this->sth, $query);
   oci_fetch_all($this->sth, $res, $start, $rows, OCI_FETCHSTATEMENT_BY_ROW+OCI_ASSOC);
   return $res;
  }
  /**
  * 获取分页数
  *
  * $query  string   查询语句
  * $total  int    总条数
  * $page  int    页数
  * $rows  int    每页显示数
  * @return integer  总行数
  */
  function getpage($query, $total, $page, $rows=VAR_PAGENAV_ROWS)
  {
   $start_row = ($page - 1) * $rows + 1;
   $start_row = $start_row > $total ? 1 : $start_row;
   $end_row  = $start_row + $rows - 1;
   $end_row  = $end_row > $total ? $total : $end_row;
   $query   = "SELECT * FROM ( SELECT ROWNUM as row_num, r.* FROM ( $query ) r WHERE ROWNUM <= $end_row ) WHERE $start_row <= row_num";
   return $this->getall($query);
  }
  /**
  * 获取一个查询的总行数
  *
  * $string $sql 查询语句
  *
  * return integer 总行数
  */
  function getcount($sql){
   $subSQL = 'select count(*) '.stristr($sql, 'from');
   return $this->getone($subSQL);
  }
  function getone($query)
  {
   $row = $this->getrow($query);
   if (is_array($row))
   $one = current($row);
   else
   $one = '';
   unset($row);
   return $one;
  }
  function getrow($query)
  {
   if (false === stripos($query, 'COUNT(')) {
   if (false === stripos($query, 'WHERE')) {
   $query .= ' WHERE ROWNUM = 1';
   } else {
   $query .= ' AND ROWNUM = 1';
   }
   }
   $result = $this->getall($query, 0, 1);
   if (emptyempty($result))
   $row = array();
   else
   $row = $result[0];
   unset($result);
   return $row;
  }
  主要二个方法我写一点注释
 
  二、调用方法
 
  $total = $this->db->getcount($sql);
 
  $result = $this->db->getpage($sql,$total,$page,$page_number);
 
  上面只是贴出部分代码,也是最核心的。

(编辑:盐城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读