ADODB , ADODB_lite

来源:互联网 发布:行知职高贴吧 编辑:程序博客网 时间:2024/05/21 16:53
ADODB是一套功能强大的数据库抽象类,可以支持很多种数据库,功能很多。但由于它太过于庞大,网上很多人感觉它比较慢,而这时就产生了简化版的ADODB,也就是 ADODB_lite ,但ADODB_lite 与ADODB事实上没有任何关系,它不是把ADODB删除一些代码而直接得到的,它们是独立的两个工程,只是ADODB_lite使用了一个简化的ADODB接口。网上的测试人员认为,ADODB_lite只需要ADODB 1/6的内存,而且工作速度比 ADODB 快很多。
以ADODB_lite 官方资料说:基于 ADODB的网站几乎可以不用修改,直接用于 ADODB_lite 。但事实却不是这样幸运。因为ADODB_lite 只有部分 ADODB的功能。如果你用了ADODB中的那些“高级”功能,那你就不得不改你的代码了。

以下列出主要的 ADODB中有,而 ADODB_lite 中没有的函数


UserDate       
UserTimeStamp  
UnixDate
UnixTimeStamp
PageExecute    
CacheExecute
CachePageExecute
GetUpdateSQL
GetInsertSQL

简要说明一下如果改写
UserDate
 摘要:这个功能是回一个格化式的日期字符串,默认为 "Y-m-d"
 ADODB中是这样用
 $db->UserDate($rs->fields['theDate'],$fmtstr);
 
 ADODB_lite 中
 date($fmtstr,strtotime($rs->fields['theDate']));

 例子:
  date('Y-m-d H:i:s',strtotime($rs->fields['theDate']));

 说明:$fmtstr 为日期格式化字符串。lite版中必须需用strtotime.

UserTimestamp
  摘要:这个函数返回一个长时间。如:2005-09-10 08:38:23 这个比较简单。(注:ADODB的这个功能是在 ADORecordSet 上的,让人有点难于理解)
  ADODB
    $rs->UserTimestamp($rs->fields['thetime']);
  
  ADODB_lite
    date('Y-m-d H:i:s',strtotime($rs->fields['thetime']));
  
  说明:这 UserDate 与 UserTimestamp 的处理方法实际上其实是一样的。

PageExecute
  摘要:这个方法相当常用。分页查询功能,指定一个每页多少个记录,指定返回第几页。page 是以1 为开始的。

  ADODB
    $rs = $db->PageExecute($sql , PAGE_SIZE, $page);

  ADODB_lite 的替代方法:
    $rs = $db->SelectLimit($sql ,PAGE_SIZE, ($page -1) * PAGE_SIZE);
  
  说明:ADODB_lite中用 SelectLimit 来替代 PageExecute 。其实这两种方法的差别不大。改动的地方也不多。

GetInsertSQL
  摘要:用数组的方式来指定需要插入的字段与值,再于数库表对应的RecordSet一起得到"insert into" SQL. 再用 ADOConnection.Execute($sql);执行插入语句

  ADODB
    $rs = $db->Execute("select * from users where userid = 0 ");
    $record = array();
    $record['userid'] = 1;
    $record['username'] = 'user_name';
    $sql = $db->GetInertSQL($rs,$record);
    $db->Execute($sql);

  ADODB_lite 替代方法
    没有什么好的替代方法,只有自己构建出 insert sql ,再执行了。
    $sql ="insert into users (userid,username) values(1,'user_name')";
    $db->Execute($sql);
  
  说明:GetInsertSQL相当方便,特别是在插入一个大表的情况下。但ADODB_lite中没有。只能自己构建。


GetUpdateSQL
  摘要:对 GetInsertSQL 差不多。只是这个得到的是 Update SQL .

  ADODB
    $rs= $db->Execute("select * form users where userid = $userid");
    if ($rs->EOF) {
        die("没有这个用户的资料,错误!");
    }
    $record = array();
    $record['passwd'] = md5($pass1);
    $sql = $db->GetUpdateSQL($rs,$record);
    $db->Execute($sql);

 ADODB_lite 替代方法
   也只有自己构建sql
   $pass1 = md5($pass1);
   $sql = "update users set passwd= $pass1 where userid = $userid";
   $db->Execute($sql);

 说明:GetUpdateSQL相当方便,特别是在更新一个大表的情况下。但ADODB_lite中没有。只能自己构建。


总的来说,也就这些了。看来 ADODB_lite 牺牲了ADODB的部分功能要提高了速度的。至于要用 ADODB 还是 ADODB_lite 还是看情况了。