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调用Oracle存储过程
Oct 09 PHP
一段php加密解密的代码
Oct 09 PHP
对Session和Cookie的区分与解释
Mar 16 PHP
php动态生成JavaScript代码
Mar 09 PHP
PHP中的float类型使用说明
Jul 27 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php插入mysql数据返回id的方法
May 31 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
php pdo连接数据库操作示例
Nov 18 PHP
php实现简易计算器
Aug 28 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
URL Rewrite的设置方法
2007/01/02 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
详解webpack2+node+react+babel实现热加载(hmr)
2017/08/24 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
vue 动态添加的路由页面刷新时失效的原因及解决方案
2021/02/26 Vue.js
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
pycharm新建一个python工程步骤
2019/07/16 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
python轮询机制控制led实例
2020/05/03 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
为什么说python适合写爬虫
2020/06/11 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
大学同学十年聚会感言
2014/02/21 职场文书
农村葬礼主持词
2014/03/31 职场文书
表彰大会策划方案
2014/05/13 职场文书
优秀大学生自荐信
2014/06/09 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
小学教师年度个人总结
2015/02/05 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书