免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: nbxmedia
打印 上一主题 下一主题

[数据库] ADODB Lite:一个轻量级的ADODB实现 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-09-25 04:57 |只看该作者

ADODB Lite:一个轻量级的ADODB实现

php5下有ADO,这东西就该扔了。

论坛徽章:
0
12 [报告]
发表于 2006-01-09 15:43 |只看该作者
php5 下有 PDO

论坛徽章:
0
13 [报告]
发表于 2006-06-08 18:13 |只看该作者
转自http://redsoft.yculblog.com/post.879819.html
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 还是看情况了。

论坛徽章:
0
14 [报告]
发表于 2006-06-08 19:34 |只看该作者
原帖由 wsswan 于 2005-7-29 11:43 发表

手册上的 Introduction:

‘We currently support MySQL, Oracle, Microsoft SQL Server, Sybase, Sybase SQL Anywhere, Informix, PostgreSQL, FrontBase, SQLite, Interbase (Firebird and Borland variants), Foxpro, Access, ADO, DB2, SAP DB and ODBC. We have had successful reports of connecting to Progress and CacheLite via ODBC. We hope more people will contribute drivers to support other databases.’

不过搞来搞去只是 runs only windows ,那就没意思了。而且我很粗劣的看了看代码,万变不离宗,还是要求 PEAR:DB ,这更没意思了,因为在很多极端的情况下,PEAR:DB 不能和标准的 PHP MySQL API 共同运行。


什么是「runs only windows」?如果你是说 windows only 的话,不知道你是说 PHP 本身还是 ADODB Lite,它们都不是 windows only。

另外,请问你看的什么代码?ADODB 和 PEAR 没有直接联系,也不要求 PEAR。

其三,PEAR:DB 和标准 PHP MySQL API 「同行」是什么意思?如果说「不能同行」是效果不一样的话,那么什么是「极端情况」?

原帖由 puppy19761210 于 2005-9-14 13:44 发表
请问这个可以在linux下运行吗?谢谢!


是可以的。

原帖由 dozec 于 2005-9-14 23:49 发表
对于个例项目的数据库操作开发完全可以自己封闭成一些类来进行,我一般都是这样,位于其上的是业务逻辑类,再其上的就是接收数据和检查的类。

但对于像ADO.NET这样的重量级的东东来说我一直比较敬畏,因为写得 ...


ADODB 不是指 ADO.NET。

论坛徽章:
0
15 [报告]
发表于 2006-06-08 19:40 |只看该作者
原帖由 spiceboy 于 2005-9-25 06:57 发表
php5下有ADO,这东西就该扔了。


不一定,看

Does this make ADOdb superflous? If you are looking for something very simple, then ADOdb is probably not for you. However ADOdb still has a big role to play, because PDO does not provide an infrastructure for enterprise database access, such as portable handling of data types and schemas, recordset caching, sql logging and tuning, session management and other nice ADOdb features. Secondly, if you come from a Microsoft background (like me), it is very easy to learn ADOdb.


From http://phplens.com/phpeverywhere/?q=node/view/1

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
16 [报告]
发表于 2006-06-08 21:48 |只看该作者
php5是PDO吧

论坛徽章:
0
17 [报告]
发表于 2006-06-09 00:12 |只看该作者
原帖由 dz902 于 2006-6-8 19:40 发表


不一定,看



From http://phplens.com/phpeverywhere/?q=node/view/1



的确,如果有windows下数据库开发背景,使用ADODB比使用PDO要容易,但是如果已经接受了PHP原生或DB,MDB,MDB2的开发思路,PDO要容易理解~~~

不过在我的框架里数据库有这几种不同的实现二次封装~~现场部署的时候根据具体环境选择具体的底层数据库封装~~~毕竟不是每个服务器都有PDO用~~~

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
18 [报告]
发表于 2006-06-09 08:55 |只看该作者
现场部署的时候根据具体环境选择具体的底层数据库封装

这个是基本要考虑和实施的

论坛徽章:
0
19 [报告]
发表于 2006-06-09 10:21 |只看该作者
原帖由 mikespook 于 2006-6-9 02:12 发表



的确,如果有windows下数据库开发背景,使用ADODB比使用PDO要容易,但是如果已经接受了PHP原生或DB,MDB,MDB2的开发思路,PDO要容易理解~~~

不过在我的框架里数据库有这几种不同的实现二次封装~~现场 ...


其实两个东西面向的用户都不同,而且也不是同一个东西。而且 ADODB 也封装了 PDO。

PDO is not a query abstraction layer like ADODB (http://adodb.sourceforge.net/) or Pear DB (http://pear.php.net/package/DB); it provides how we access the databases and how the result from the databases are handled, projects like ADODB might implement a PDO backend, but do not get confused and think that these two things are the same.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP