limit好吧~~因为用seek的话每次都必须读取所有数据

解决方案 »

  1.   

    <?php
    /*
     ********************************************************************
     *  Editor           :  EditPlus+ 2.11                              *
     ******************************************************************** +------------------------------------------------------------------+
     |  PHP Version 4                                                   |
     +------------------------------------------------------------------+
     |  Copyright (C) 2004-2005 All Right Reseved Pc Rookie's           |
     +------------------------------------------------------------------+
     |  Notices:                                                        |
     |  If you found any error in the source code. Then I'll hope you s-|
     |end Bug email to us. So we'll thank you very much.                |
     |                                                                  |
     |                                                                  |
     |                                                                  |
     +------------------------------------------------------------------+
     |  Website         :   http://www.5down6.net                       |
     |  Author          :   Pc Rookie's                                 |
     |  Contact Email   :   [email protected]                            |
     |  LastModify      :   2004/11/12                                  |
     +------------------------------------------------------------------+
     +------------------------------------------------------------------+
     |  FileName        :   DB.php                                      |
     ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     |  Function        :   Database independent query interface        |
     +------------------------------------------------------------------+
    */class DB
    {
    var $Host        = "";   //数据库主机
    var $Database    = "";   //数据库
    var $User        = "";   //用户名
    var $Password    = "";   //密码 var $Auto_Free   = 0;    //设置为1程序结束会执行mysql_free_result()
    var $Debug       = 1;    //设置为0不显示调试信息
    var $Halt_On_Err = "yes";/*设置为"yes"终止错误并显示信息;
                               设置为"no"忽略错误;
       设置为"report"忽略错误,但是会报告错误.
                             */
    var $PConnect    = 0;    //设置为1数据库将使用mysql_pconnect持久连接

    var $linkID      = 0;    //链接标识
    var $queryID     = 0;    //查询结果标识 var $queryRow    = 0;    //SQL影响的行 //数据库链接方法
        /*
      返回值:
             链接资源标识
    */
    function DB($Host = "", $User = "", $Password = "", $Database = "")
    {
    //检查各项参数是否为空
    if(!($this -> Host == "") && !($this -> User == "") && !($this -> Database== ""))
    {
    //不为空!
    $Host     = $this -> Host;
    $User     = $this -> User;
    $Password = $this -> Password;
    $Database = $this -> Database;
    }
    else
    {
    //为空!子类定义的参数不完整
    die(SUB_CLASS_PARAMETER_IS_NOT_FULL);
    }

    //成功链接到数据库否
    if($this -> linkID == 0)
    {
    //尚未链接到数据库!链接方式选择持久链接还是普通链接
    if($this -> PConnect)
    {
    //持久链接
    $this -> linkID = @mysql_pconnect($Host, $User, $Password);
    }
    else
    {
    //普通链接
    $this -> linkID = @mysql_connect($Host, $User, $Password);
    }

    //成功链接到数据库否
    if(!$this -> linkID)
    {
    //链接失败!输出错误信息
    DB::mysql_err_msg();
    }
    else
    {
    //链接服务器成功!打开数据库失败否
    if(!@mysql_select_db($this -> Database))
    {
    //数据库不存在则建立
    if(!@mysql_query("create database ".$this -> Database));
    {
    //打开数据库失败!输出错误信息
    DB::mysql_err_msg();
    }
    }
    }
    }
    //返回成功的链接标识
    return $this -> linkID;
    } //SQL语句执行方法
    /*
      返回值:
             SQL语句影响的总行数
             SQL对任何行没产生影响则返回字符串
    */
    function query($SQL = "")
    {
    //SQL语句为空否
    if($SQL == "")
    //为空!SQL语句为空
    die(SQL_ERR_MSG_SQL_IS_EMPTY);
    else
    {
    //不为空!执行SQL并将结果标识赋给$queryID
    $this -> queryID = @mysql_query($SQL);
    //SQL执行成功否
    if(!$this -> queryID)
    {
    //失败!输出错误信息
    DB::mysql_err_msg();
    }
    else
    {
    //成功!是SELECT语句否
    if(eregi("select",$SQL))
    {
    //是(SELECT)
    $this -> queryRow = @mysql_num_rows($this -> queryID);
    }
    else
    {
    //不是(是INSERT、DELETE、UPDATE)
    $this -> queryRow = @mysql_affected_rows();
    }
    //响应SQL语句的记录数为0否
    if(!($this -> queryRow))
    //返回无记录响应提示信息
    return $this -> queryRow = NOT_ANY_REC;
    }
    }
    } //获取查询操作结果集
    /*
      返回值: 
             数组Key为数据库字段名的二维数组
    */
    function rs()
    {
    //查询结果记录集为0否
    if($this -> queryRow)
    {
    //结果不为0;有符合条件记录
    //按行生成记录结果集
    $result =  mysql_fetch_object($this -> queryID);
    //按照查询结果记录集的字段总数
    for($j = 0; $j < mysql_num_fields($this -> queryID); $j++)
    {
    //依次获取字段名存入数组
    $fields = mysql_field_name($this -> queryID, $j);
    //按照[Key] => [Fields]、[Value] => [Value]赋值
    $rs[$fields] = $result -> $fields;
    }
    //返回数组
    return $rs;
    }
    } //获取分页参数的方法
    /*
      返回值:
             数组(SQL影响记录数, 定义每页显示记录数, 当前页, 总页数, 每页开始标记, 每页结束标记)
     使用:list函数获[推荐]
          list($total_rec, $page_size, $page, $total_page, $page_start, $page_end) = $obj -> splitPage($page_size, $page);   直接获取[不推荐]
    */
    function splitPage($page_size = 15,$page = 1)
    {
    //判断当前页面为第一页否
    $page ? $page = $page : $page = 1;
    //判断总记录数超过一页否
    if($page_size > $this -> queryRow)
    {
    //记录不多于一页,设置总页数
    $total_page = 1;
    //当前页起始标记值
    $page_start = 0;
    //当前页结束标记值
    $page_end = $this -> queryRow;
    }
    else
    {
    //记录总数多于一页,计算总页数
    $total_page = ceil($this -> queryRow/$page_size);
    //当前页起始标记值
    $page_start = $page_size*($page-1);
    //当前页结束标记值
    $page_end = $page_size*$page;
    //当前页为末页否
    if($page_end > $this -> queryRow)
    //为末页,更改当前页结束标记值为总记录数
    $page_end  = $this -> queryRow;
    }
    //定位数据库指针
    @mysql_data_seek($this -> queryID, $page_end);
    //返回数组
    return $split = array($this -> queryRow, $page_size, $page, $total_page, $page_start, $page_end);
    } //释放资源方法
    function free()
    {
    @mysql_free_result($this ->queryID);
    $this -> queryID = 0;
    } //错误处理方法
    function mysql_err_msg()
        {
    //获取错误代码
    $this -> errno = @mysql_errno();
    //获取错误信息
    $this -> error = @mysql_error(); //输出错误代码、信息
    $this -> print_mysql_error();
        } //错误信息输出方法[返回字符串]
    function print_mysql_error()
    {

    if($this -> Debug)
    {
    switch($this -> Halt_On_Err)
    {
    case("yes"):
    //终止程序执行并输出错误代码、信息
    die($this -> errno.":".$this -> error);
    break;
    case("no"):
    break;
    default:
    //输出错误代码、信息
    echo $this -> errno.":".$this -> error;
    break;
    }
    }
    }
    ?>
      

  2.   

    感谢 PcVSBirds(pc_birds)不过还没有回答实质性的问题 :(
      

  3.   

    limit效率低!因为每次都会去数据库进行查询取值而上面的类是直接将查询结果先缓存然后使用指针进行定位的效率优略显而易见