本文实例讲述了PHP实现的oracle分页函数。分享给大家供大家参考,具体如下:
mysql有limit,分页的时候,我们可以用limit 30,40,而oracle没有limit,用其他的方法来代替--rownum.
一、底层方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/**
* 数据连接
*/
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 ;
}
|
主要二个方法我写一点注释
二、调用方法
1
2
|
$total = $this ->db->getcount( $sql );
$result = $this ->db->getpage( $sql , $total , $page , $page_number );
|
上面只是贴出部分代码,也是最核心的。
希望本文所述对大家PHP程序设计有所帮助。