PHP MySQL数据库操作-分页链接通用类

PHP MySQL数据库操作-分页链接通用类



[复制到剪切板]
CODE:
<?php
/*************************************
类名:CDb()
 PHP MySQL数据库操作通用完全类
 
作者:月影 2006-11于海南大学完成    技术支持:Email:[email protected]  QQ:41096834
没有版权,欢迎转发 但请保留此说明 谢谢 有什么问题,欢迎一起交流 进步
说明 凡是本人写的PHP类,都以MFC的类的命名方式为参照 即以大写C开头
第二个字母也大写 其它字母小写 如CUpload,CDb,CImage等,且均以UTF-8编码保存,如果你的网页使用其它编码,请自行转化编码
转化方法:用记事本打开本文件,选择“文件--->另存为”,在“编码”中选择 "UTF-8" 保存即可.]

欢迎广大外语爱好者提供此版本的外语翻译版,表示感谢
**************************************

此类有什么特殊之处:
1.集成数据库查询
2.智能化Select查询语句处理,用户不必再在SQL语句中加入limit指令,让你彻底忘却分页带来的痛苦
3.此类取得总记录数的原理是当你在执行select查询时,将查询语句转化为 select count(*) from TB...来查询,所以,效率,相当高
3.集成分页链接生成

可以说,此数据库类是我自从2006从事PHP编写为至,最为满意的类,同时,也感谢网友提供大量建议及测试
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
使用范例:
//构造一个数据库类,并连连接到info数据库,MySQL服务器的IP为10.0.0.254,用户名为 root,密码为test
$db=new CDb("info","10.0.0.254","root","test");
$db->page_size=20;            //设置每页显示20条记录
$db->page_str='page';        //设置分页符为 'page',比方show.php?offset=12,那么请设置为'offset'
$sql='select * from TB where id<125';    //你要执行的查询语句,注意,这里不用加入limit来达到分页!!!
$db->query($sql);                //执行查询,当然,如果是删除记录,添加记录,修改记录,也可以这样执行.

while($rs=$db->get_rs())
{
  echo $rs['id'],$rs['user_name'];
}

echo '当前页',$db->get_current_page('page');
echo '总记录数',$db->rs_count;
echo '总页数',$db->page_count

$db->link(10,'sort=new');    //自动生成分页链接
//上面的10意思是每页最多显示10个数字链接,后面的sort=new 就称为GET的附加URL字符串

//比如,你的URL可能是这样的:
//http://xxx/show.php?page=12&sort=new&area_id=45

//那么分页链接就可以这样生成
$db->link(10,'sort=new&area_id=45');
*************************************************************************

接口函数说明:
void __construct(string $database,string $host,string $user,string $passwd)
    功能 CDb类的构造函数 构造一个数据库类
    参数:
    $database 要连接的数据库
    $hos    M ySQL服务器IP地址或主机名
    $user    MySQL服务器用户名
    $passwd  MySQL服务器密码
                
void select_db (string $database)
    功能:  切换要使用的数据库
    参数 : $database 要使用的数据库名
    
resource id query(string $sql)
    功能 :根据传入的查询语句,返回一个查询结果资源号
    参数: $sql 查询语句 如 $sql="select * from Table"
    
Array CDb::get_rs(void)
    功能: 根据CDb::query(string $sql)的查询结果 得到一个记录集合关联数组

int get_current_page($page_str="page")
    功能:返回当前页号
    参数:$page_str:        分页符字符串
    
接口数据成员:

page_size : 每页显示的记录数
rs_count  : 查询总记录数

*/
class CDb
{
    private 
$host;    //MySQL服务器
    
private $result;    //一个查询结果集合
    
private $row;    //查询结果对象
    
private $sql;    //查询语句
    
private $rs;    //查询结果记录关联数组
    
private $conn;    //数据库连接结果资源
    
private $user;        //MySQL服务器用户名
    
private $passwd;    //MySQL服务器密码    
    
    
public $rs_count=0;
    public 
$page_size=30;
    public 
$page_str='page';
    public 
$page_count;
    

    public function 
__construct($database="ly",$host="127.0.0.1",$user="root",$passwd="key2000"){
        
$this->host=$host;
        
$this->usr=$user;
        
$this->psd=$passwd;
        
$this->database=$database;
        
$this->sql="";
        
        
$this->conn=mysql_connect($host,$user,$passwd) or die("<h3>Can not connect to MySQL Server.</h3>");            
        
$this->select_db($database);
        
//$this->query("set NAMES 'utf8'");
        
return $this->conn;
    }
        
//切换数据库
    
function select_db($database){
        
$this->database=$database;
        
mysql_select_db($this->database);
    }
    
    public function 
query($sql){    
        
$this->sql=$sql;
        
        if(
stripos(trim($sql),'select')==0)  //如果是select 查询
        
{
            
$pattern '/select\s(.+)\sfrom/im';
            
$tmp_sql=preg_replace($pattern,'select count(*) from',$sql);
            
$this->result=mysql_query($tmp_sql);
            
$rs=$this->get_rs();        
            
$this->rs_count=$rs['count(*)'];    //取得记录总数
            
            
$this->page_count=ceil($this->rs_count/$this->page_size);
        
//处理分页查询
            
$current_page=$this->get_current_page($this->page_str);
            if (
$current_page>$this->page_count) { $current_page=$this->page_count;    }        
            
$current_page=$current_page<1?1:$current_page;
            
$this->absolute_page=$current_page;
            
$this->page_count=ceil($this->rs_count/$this->page_size);
        
            
$sql=$sql.sprintf(" limit %d,%d",($current_page-1)*$this->page_size,$this->page_size);
        }
        else
        {
            
$this->rs_count=0;
        }        
        
        
$this->result=mysql_query($sql,$this->conn);
        
        return 
$this->result;    
    }
        
    public function 
get_rs(){
        
$this->errdb("Array CDb::get_rs(void)");
         
$this->rs=mysql_fetch_array($this->result);
         return 
$this->rs;
    }
    
    public function 
get_current_page($page_str="page")
    {
        if(isset(
$_GET[$page_str]))
        {
            
$page_str=$_GET[$page_str];
            if(!
is_numeric($page_str))
                    return 
1;
            return (
$page_str);
        }
        else
            return 
1;
    }
    
    public function  
__destruct(){
        
//mysql_close($this->conn);
    
}
    
    
//分页链接
    
public function link($num_per_page=10,$extra_str='')
    {        
        GLOBAL 
$PHP_SELF;
        
$page_str=$this->page_str;
        
$prefix=$PHP_SELF.'?'.$extra_str.'&&'.$page_str.'=';
        
$current_page=$this->absolute_page;
        
$page_count=$this->page_count;
        if(
$page_count<=1)    
        {
            return ;
        }
        
        if(
$page_count>1)
        {
            echo(
"<a href=$prefix 1><首页></a> ");
        }
        if(
floor($current_page/$num_per_page))
        {
            
printf(" <a title=\"上%d页\"  href=\"%s%d\">%s</a>\n",$num_per_page,$prefix,floor($current_page/$num_per_page)*$num_per_page-1,"<<");//
        
}
        
        
$tmp=floor($current_page/$num_per_page)*$num_per_page+1;
        
$s2=ceil($tmp/$num_per_page)*$num_per_page;
        for(
$i=$tmp;($i<=$s2&&$i<=$this->page_count);$i++)
        {
            if(
$i==$current_page)
            {
                    echo(
"$i ");
                    continue;
            }
            echo(
" <a href=\"$prefix$i\">$i</a>\n");
        }

        if((
floor($current_page/$num_per_page)*$num_per_page+$num_per_page)<$page_count)
        {
            
printf("<a title=\"下%d页\"  href=\"%s%d\">%s</a>",$num_per_page,$prefix,ceil($current_page/$num_per_page)*$num_per_page+1,">>");
        }
        
        if(
$current_page<$page_count)
        {
            echo(
" <a href=$prefix$page_count><末页></a>");
        }
        
printf(" <INPUT TYPE=text NAME=jump size=2 value=%s>",$current_page<$page_count?$current_page+1:1);
        
printf(" <input type=button value=GO onclick=window.location='%s'+document.all.jump.value>",$prefix);
        
        
printf("\n页次 $current_page/$page_count\n");
        
    }
    
    private function 
errdb($str){
        if(!
$this->result){
            echo 
"At Line :"__LINE__;
            echo(
" The CDb::query(\$sql)  Return an Unvalid Resource,so Can't contiune.\n");
            echo(
$this->sql);            
            exit;
        }
    }    
}
?> ;


先收藏一下啊!!看看能不能用在别的数据库里啊!!谢谢了!!

谢谢,已经用上了!