本文实例讲述了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程序设计有所帮助。