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的ob_start();控制您的浏览器cache!
Nov 25 PHP
php cli模式学习(PHP命令行模式)
Jun 03 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
php时间函数用法分析
May 28 PHP
php实现登陆模块功能示例
Oct 20 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
详解php伪造Referer请求反盗链资源
Jan 24 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
Sep 16 PHP
PHP const定义常量及global定义全局常量实例解析
May 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php中的登陆login实例代码
2016/06/20 PHP
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
python求素数示例分享
2014/02/16 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
用Python设计一个经典小游戏
2017/05/15 Python
通过Pandas读取大文件的实例
2018/06/07 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
收银员的岗位职责范本
2014/02/04 职场文书
大学生村官承诺书
2014/03/28 职场文书
商铺租赁意向书
2014/04/01 职场文书
厨房管理计划书
2014/04/27 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
Ajax是什么?Ajax高级用法之Axios技术
2021/04/21 Javascript
Java如何实现树的同构?
2021/06/22 Java/Android
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers