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

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

二、调用方法

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

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

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

Tags: oracle分页 PHP分页函数

分享到: