PHP实现的oracle分页函数实例


Posted in PHP onJanuary 25, 2016

本文实例讲述了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);

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
高亮度显示php源代码
Oct 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
php使用百度ping服务代码实例
Jun 19 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
THINKPHP2.0到3.0有哪些改进之处
Jan 04 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
全面解析PHP操作Memcache基本函数
Jul 14 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
PHP使用OB缓存实现静态化功能示例
Mar 23 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 #PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 #PHP
crontab无法执行php的解决方法
Jan 25 #PHP
win7安装php框架Yii的方法
Jan 25 #PHP
php结合md5实现的加密解密方法
Jan 25 #PHP
PHP几个实用自定义函数小结
Jan 25 #PHP
php代码架构的八点注意事项
Jan 25 #PHP
You might like
PHP无限分类(树形类)的深入分析
2013/06/02 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
php验证码生成器
2017/05/24 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
angularJS中$apply()方法详解
2015/01/07 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
django富文本编辑器的实现示例
2019/04/10 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python中for in的用法详解
2020/04/17 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
求职信内容考虑哪几点
2013/10/05 职场文书
英语专业推荐信
2013/11/16 职场文书
环境科学毕业生自荐信
2013/11/21 职场文书
机械专业应届生求职信
2013/12/12 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
高考备战决心书
2014/03/11 职场文书
小学毕业演讲稿
2014/04/25 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
建党伟业观后感
2015/06/01 职场文书
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
js作用域及作用域链工作引擎
2022/07/07 Javascript