当前位置:首页 > PHP教程 > php分页 > 列表

PHP实现的oracle分页函数实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-07 11:05:46 浏览: 评论:0 

这篇文章主要介绍了PHP实现的oracle分页函数,结合实例形式分析了PHP针对oracle数据库使用rownum代替MySQL中limit实现的分页操作相关技巧,需要的朋友可以参考下

本文实例讲述了PHP实现的oracle分页函数,分享给大家供大家参考,具体如下:

mysql有limit,分页的时候,我们可以用limit 30,40,而oracle没有limit,用其他的方法来代替--rownum.

一、底层方法

  1. /** 
  2.  * 数据连接 
  3.  */ 
  4. function connect($db_user$db_pwd$db_name$db_nls
  5.  $this->dbh = oci_connect($db_user$db_pwd$db_name$db_nls); 
  6. function getall($query$start=0, $rows=-1) 
  7.  $this->dbh = emptyempty($this->dbh) ? $this->connect() : $this->dbh; 
  8.  $this->sth = oci_parse($this->dbh, $query); 
  9.  oci_execute($this->sth, OCI_DEFAULT) or $this->error($this->sth, $query); 
  10.  oci_fetch_all($this->sth, $res$start$rows, OCI_FETCHSTATEMENT_BY_ROW+OCI_ASSOC); 
  11.  return $res
  12. /** 
  13. * 获取分页数 
  14. * 
  15. * $query  string   查询语句 
  16. * $total  int    总条数 
  17. * $page  int    页数 
  18. * $rows  int    每页显示数 
  19. * @return integer  总行数 
  20. */ 
  21. function getpage($query$total$page$rows=VAR_PAGENAV_ROWS) 
  22.  $start_row = ($page - 1) * $rows + 1; 
  23.  $start_row = $start_row > $total ? 1 : $start_row
  24.  $end_row  = $start_row + $rows - 1; 
  25.  $end_row  = $end_row > $total ? $total : $end_row
  26.  $query   = "SELECT * FROM ( SELECT ROWNUM as row_num, r.* FROM ( $query ) r WHERE ROWNUM <= $end_row ) WHERE $start_row <= row_num"
  27.  return $this->getall($query); 
  28. /** 
  29. * 获取一个查询的总行数 
  30. * 
  31. * $string $sql 查询语句 
  32. * 
  33. * return integer 总行数 
  34. */ 
  35. function getcount($sql){ 
  36.  $subSQL = 'select count(*) '.stristr($sql'from'); 
  37.  return $this->getone($subSQL); 
  38. function getone($query
  39.  $row = $this->getrow($query); 
  40.  if (is_array($row)) 
  41.  $one = current($row); 
  42.  else 
  43.  $one = ''
  44.  unset($row); 
  45.  return $one
  46. function getrow($query
  47.  if (false === stripos($query'COUNT(')) { 
  48.  if (false === stripos($query'WHERE')) { 
  49.  $query .= ' WHERE ROWNUM = 1'
  50.  } else { 
  51.  $query .= ' AND ROWNUM = 1'
  52.  } 
  53.  } 
  54.  $result = $this->getall($query, 0, 1); 
  55.  if (emptyempty($result)) 
  56.  $row = array(); 
  57.  else 
  58.  $row = $result[0]; 
  59.  unset($result); 
  60.  return $row

主要二个方法我写一点注释

二、调用方法

$total = $this->db->getcount($sql);

$result = $this->db->getpage($sql,$total,$page,$page_number);

上面只是贴出部分代码,也是最核心的。

Tags: oracle分页 PHP分页函数

分享到: