<?php
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;
}
}
}
?>

解决方案 »

  1.   

    ldap有count函数:ldap_get_entries
    取得全部传回资料。语法: array ldap_get_entries(int handle, int result_identifier);传回值: 阵列return_value["count"] : 传回资料笔数
    return_value[0] : 第一笔传回资料
    return_value[i]["dn"] : 第 i+1 笔资料的 DN
    return_value[i]["count"] : 第 i+1 笔资料的数目
    return_value[i][j] : 第 i+1 笔资料的第 j 值
    return_value[i]["attribute"]["count"] : 第 i+1 笔资料的属性数
    return_value[i]["attribute"][j] : 第 i+1 笔资料的第 j 个属性例如:
      $r=ldap_bind($ds,$dn,$pass);                      //绑定
      $sr=ldap_search($ds,$ldap_dn,"uidnumber=$uid");   //按uidnumber=$uid的条件搜索
      $info = ldap_get_entries($ds,$sr);                //读取所有传回资料集
      $max=$info["count"];                              //得到资料集总数
      

  2.   

    jxflll(峰):
    我的意思是ldap查询无法取得符合条件的某几条记录。
    譬如符合某个条件的有10000条记录,象sql就可以取中间的某些记录。例如从第200条取到第300条。
    但ldap却无法取得中间的某些记录的。
    只能全部取出再分页,这样就很慢了。