整了个mysql和mssql都可以用的分页类
时间:2008-08-08
来源:互联网
网上找了个分页的轮子,组装了下,希望还可以改进
复制PHP内容到剪贴板
<?
class Page{
private $QueryStr;//查询的SQL
private $page;//传入的页码
private $pageSize;//每页行数
private $type; //数据库类型 0:mysql 1:mssql
private $total; //记录总数
private $result;
function __construct($sql,$size,$page=1,$type=0){
$this->QueryStr=$sql;
$this->page=$page;
$this->pageSize=$size;
$this->type=$type;
$this->total=$this->type ? mssql_num_rows($this->result=mssql_query($this->QueryStr)) : mysql_num_rows($this->result=mysql_query($this->QueryStr));
}
function query(){
if($this->type){
$num_rows_func="mssql_num_rows";
$data_seek_func="mssql_data_seek";
$fetch_array_func="mssql_fetch_array";
}
if(!$this->type){
$num_rows_func="mysql_num_rows";
$data_seek_func="mysql_data_seek";
$fetch_array_func="mysql_fetch_array";
}
if($this->result){
$totalPage = ceil($num_rows_func($this->result)/$this->pageSize);
if (!$this->page || $this->page<=0) $this->page=1;
if ($this->page>$totalPage) $this->page=$totalPage;
$begin = ( $this->page-1 ) * $this->pageSize;
$ReArr=array();
$index=0;
if($this->pageSize>0) $data_seek_func($this->result,$begin);
while([email=$ResultArr=@$fetch_array_func($this-]$ResultArr=@$fetch_array_func($this->result[/email])){
if($this->pageSize>0)
if($index>$this->pageSize-1) break;
$ReArr[$index]=$ResultArr;
$index++;
}
return $ReArr;
}else
return false;
}
function getPage($url=''){
//定义几个全局变量:$firstcount、$displaypg、$pagenav。
//$page:当前页码;
//$firstcount:(数据库)查询的起始项;
//$pagenav:页面导航条代码,函数内部并没有将它输出;
//$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
global $page,$firstcount,$pagenav,$_SERVER;
//为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
$GLOBALS["displaypg"]=$this->pageSize;
if(!$this->page) $page=1;
//如果$url使用默认,即空值,则赋值为本页URL:
if(!$url){ $url=$_SERVER["REQUEST_URI"];}
//URL分析:
$parse_url=parse_url($url);
$url_query=$parse_url["query"]; //单独取出URL的查询字串
if($url_query){
//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
//这里用到了正则表达式,请参考“PHP中的正规表达式”([url=http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html]http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html[/url])
$url_query=ereg_replace("(^|&)page=$page","",$url_query);
//将处理后的URL的查询字串替换原来的URL的查询字串:
$url=str_replace($parse_url["query"],$url_query,$url);
//在URL后加page查询信息,但待赋值:
if($url_query) $url.="&page"; else $url.="page";
}else {
$url.="?page";
}
//页码计算:
$lastpg=ceil($this->total/$this->pageSize); //最后页,也是总页数
$page=min($lastpg,$this->page);
$prepg=$page-1; //上一页
$nextpg=($page==$lastpg ? 0 : $page+1); //下一页
$firstcount=($page-1)*$this->pageSize;
//开始分页导航条代码:
$pagenav="显示第 <B>".($this->total?($firstcount+1):0)."</B>-<B>".min($firstcount+$this->pageSize,$this->total)."</B> 条记录,共 $this->total 条记录<BR>";
//如果只有一页则跳出函数:
if($lastpg<=1) return $pagenav;
$pagenav.=" <a href='$url=1'>首页</a> ";
if($prepg) $pagenav.=" <a href='$url=$prepg'>前页</a> "; else $pagenav.=" 前页 ";
if($nextpg) $pagenav.=" <a href='$url=$nextpg'>后页</a> "; else $pagenav.=" 后页 ";
$pagenav.=" <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for($i=1;$i<=$lastpg;$i++){
if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n";
else $pagenav.="<option value='$i'>$i</option>\n";
}
$pagenav.="</select> 页,共 $lastpg 页";
return $pagenav;
}
}
?>
调用页
PHP代码:
<?
class Page{
private $QueryStr;//查询的SQL
private $page;//传入的页码
private $pageSize;//每页行数
private $type; //数据库类型 0:mysql 1:mssql
private $total; //记录总数
private $result;
function __construct($sql,$size,$page=1,$type=0){
$this->QueryStr=$sql;
$this->page=$page;
$this->pageSize=$size;
$this->type=$type;
$this->total=$this->type ? mssql_num_rows($this->result=mssql_query($this->QueryStr)) : mysql_num_rows($this->result=mysql_query($this->QueryStr));
}
function query(){
if($this->type){
$num_rows_func="mssql_num_rows";
$data_seek_func="mssql_data_seek";
$fetch_array_func="mssql_fetch_array";
}
if(!$this->type){
$num_rows_func="mysql_num_rows";
$data_seek_func="mysql_data_seek";
$fetch_array_func="mysql_fetch_array";
}
if($this->result){
$totalPage = ceil($num_rows_func($this->result)/$this->pageSize);
if (!$this->page || $this->page<=0) $this->page=1;
if ($this->page>$totalPage) $this->page=$totalPage;
$begin = ( $this->page-1 ) * $this->pageSize;
$ReArr=array();
$index=0;
if($this->pageSize>0) $data_seek_func($this->result,$begin);
while([email=$ResultArr=@$fetch_array_func($this-]$ResultArr=@$fetch_array_func($this->result[/email])){
if($this->pageSize>0)
if($index>$this->pageSize-1) break;
$ReArr[$index]=$ResultArr;
$index++;
}
return $ReArr;
}else
return false;
}
function getPage($url=''){
//定义几个全局变量:$firstcount、$displaypg、$pagenav。
//$page:当前页码;
//$firstcount:(数据库)查询的起始项;
//$pagenav:页面导航条代码,函数内部并没有将它输出;
//$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。
global $page,$firstcount,$pagenav,$_SERVER;
//为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。
$GLOBALS["displaypg"]=$this->pageSize;
if(!$this->page) $page=1;
//如果$url使用默认,即空值,则赋值为本页URL:
if(!$url){ $url=$_SERVER["REQUEST_URI"];}
//URL分析:
$parse_url=parse_url($url);
$url_query=$parse_url["query"]; //单独取出URL的查询字串
if($url_query){
//因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。
//这里用到了正则表达式,请参考“PHP中的正规表达式”([url=http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html]http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html[/url])
$url_query=ereg_replace("(^|&)page=$page","",$url_query);
//将处理后的URL的查询字串替换原来的URL的查询字串:
$url=str_replace($parse_url["query"],$url_query,$url);
//在URL后加page查询信息,但待赋值:
if($url_query) $url.="&page"; else $url.="page";
}else {
$url.="?page";
}
//页码计算:
$lastpg=ceil($this->total/$this->pageSize); //最后页,也是总页数
$page=min($lastpg,$this->page);
$prepg=$page-1; //上一页
$nextpg=($page==$lastpg ? 0 : $page+1); //下一页
$firstcount=($page-1)*$this->pageSize;
//开始分页导航条代码:
$pagenav="显示第 <B>".($this->total?($firstcount+1):0)."</B>-<B>".min($firstcount+$this->pageSize,$this->total)."</B> 条记录,共 $this->total 条记录<BR>";
//如果只有一页则跳出函数:
if($lastpg<=1) return $pagenav;
$pagenav.=" <a href='$url=1'>首页</a> ";
if($prepg) $pagenav.=" <a href='$url=$prepg'>前页</a> "; else $pagenav.=" 前页 ";
if($nextpg) $pagenav.=" <a href='$url=$nextpg'>后页</a> "; else $pagenav.=" 后页 ";
$pagenav.=" <a href='$url=$lastpg'>尾页</a> ";
//下拉跳转列表,循环列出所有页码:
$pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n";
for($i=1;$i<=$lastpg;$i++){
if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n";
else $pagenav.="<option value='$i'>$i</option>\n";
}
$pagenav.="</select> 页,共 $lastpg 页";
return $pagenav;
}
}
?>
复制PHP内容到剪贴板
<?
include('page.class.php');
/**
* mysql分页测试
*/
$host='localhost';
$user='root';
$psw ='';
$db='york';
$page = isset($_GET['page']) ? $_GET['page'] : 1; //当前页码
$size=10;//每页行数
$link=mysql_connect($host,$user,$psw) or die (mysql_error());
mysql_select_db($db,$link);
mysql_query('set names utf8');
$sql='select lei from york_lei';
$p=new page($sql,$size,$page);
$result=$p->query();
header('Content-Type:text/html; charset=utf-8');
foreach($result as $a) echo $a[0].'<br/>' ;//遍历输出数据集
echo '<br/>';
print($p->getPage());//输出分页条
/**
* mssql分页测试
$host='localhost';
$user='sa';
$psw='123456';
$db='test';
$page = isset($_GET['page']) ? $_GET['page'] : 1; //当前页码
$size=20;//每页行数
$link=mssql_connect($host,$user,$psw) or die ('连接数据库服务器失败');
mssql_select_db($db,$link);
$sql='select mobile from sms_send_temp';
$p=new page($sql,$size,$page,1);
$result=$p->query();
header('Content-Type:text/html; charset=utf-8');
foreach($result as $a) echo $a[0].'<br/>';//遍历输出数据集
print($p->getPage());//输出分页条
*/
?>
[ 本帖最后由 netbuddy 于 2008-8-8 15:34 编辑 ] PHP代码:
<?
include('page.class.php');
/**
* mysql分页测试
*/
$host='localhost';
$user='root';
$psw ='';
$db='york';
$page = isset($_GET['page']) ? $_GET['page'] : 1; //当前页码
$size=10;//每页行数
$link=mysql_connect($host,$user,$psw) or die (mysql_error());
mysql_select_db($db,$link);
mysql_query('set names utf8');
$sql='select lei from york_lei';
$p=new page($sql,$size,$page);
$result=$p->query();
header('Content-Type:text/html; charset=utf-8');
foreach($result as $a) echo $a[0].'<br/>' ;//遍历输出数据集
echo '<br/>';
print($p->getPage());//输出分页条
/**
* mssql分页测试
$host='localhost';
$user='sa';
$psw='123456';
$db='test';
$page = isset($_GET['page']) ? $_GET['page'] : 1; //当前页码
$size=20;//每页行数
$link=mssql_connect($host,$user,$psw) or die ('连接数据库服务器失败');
mssql_select_db($db,$link);
$sql='select mobile from sms_send_temp';
$p=new page($sql,$size,$page,1);
$result=$p->query();
header('Content-Type:text/html; charset=utf-8');
foreach($result as $a) echo $a[0].'<br/>';//遍历输出数据集
print($p->getPage());//输出分页条
*/
?>
作者: netbuddy 发布时间: 2008-08-07
不知道用单例模式是否要好些,这样每次切换页面时就不用重新查询一次。
内容太多了回复显示不完成,还是传附件吧
[ 本帖最后由 netbuddy 于 2008-8-8 17:45 编辑 ]
内容太多了回复显示不完成,还是传附件吧
[ 本帖最后由 netbuddy 于 2008-8-8 17:45 编辑 ]
作者: netbuddy 发布时间: 2008-08-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28