在PHP项目开发中,很多架构都是:Smarty + ADODB来做的,因为Smarty功能强大,超过了任何模板处理类,特别是缓存技术。ADODB功能强大,远远超过了PEAR::DB处理类,所以大部分人都选择ADODB做数据库抽象类,但是adodb类库非常庞大,运行速度非常慢,这样也是部分开发人员选择pear DB的原因。
但是,现在为止,这个现象要改变了,因为出来了一个ADODB的小型版: ADODB Lite
据官方网站介绍说:
支持了所有PHP能支持的流行数据库.而且据说比原来的老版本快了很多.
只需要完整版的1/6内存,完全兼容ADODB,据官方说法,可以完全不要改动代码的情况下移植到ADODB Lite下。
(一)如何安装与数据库的连接
作为php的一个重要类库,ADOdb在02年的时候就出现了,到目前为止,已经发展到5.x版了,体积也是越来越大,当然,支持的数据库也是越来越多,功能也更完善.不但能够使你的PHP程序从一种数据库无缝移植到另一种数据库上,还提供了一个数据缓冲层.
随着ADOdb的完善,问题也来了,它的体积太大,严重影响到了运行效率,而且大多数功能很少能够用到.
于是就有了ADOdb Lite.
本文将不讨论ADOdb与ADOdb Lite的功能上有什么区别,只讲ADOdb Lite能实现什么样的功能.
————————————————————————————————————————————–
第一话,adodb lite的安装
adodb lite的官方站点
http://adodblite.sourceforge.net/index.php
adodb lite的下载地址
http://sourceforge.net/project/showfiles.php?group_id=140982
最新版为1.42
首先下载源文件包到本地,解压缩到WEB目录任一级下面.和其它类库一样,起一个你喜欢的文件夹名.比如我直接用adodb作为文件夹的名字.
创建一个php文件,内容如下:
这样就连接上adodb lite了.也就是说,通过这些操作,adodb lite也就算是安装好了.
第二话 如何使用ADOdb Lite连接数据库
ADOdb Lite目前支持15种数据库:分别是
Frontbase .Max DB. Mini SQL,Microsoft SQL,MySql,MySql Improved,MySql w/transactions,PostGres/PostGres 6.4,PostGres 7,PostGres 8,SqLite,SqLIte Pro,Sybase,SyBase ASE
例子:
createdatabase = true ; //可选项,当数据库不存在时自动创建
$db->port=’3306′;//可选项,连接数据库所使用的端口号
$result = $db->NConnect(“$dbhost”, “$dbuname”, “$dbpass”, “$dbname”);
$dbhost = “主机”;
$dbuname = “用户名”;
$dbpass = “口令”;
$dbname = “数据库名”;
?>
实例化ADOdb Lite时数据库类型所使用的值 数据库软件名称
fbsq Frontbase
maxdb Max DB
msql Mini SQL
mssql Microsoft SQL
mysql MySql
mysqli MySql Improved
mysqlt MySql w/transactions
postgres PostGres
postgres64 PostGres 6.4
postgres7 PostGres 7
postgres8 Postgres 8
sqlite SqLite
sqlitepo SqLite Pro
sybase Sybase
sybase_ase SyBase ASE
比如你使用的是MySql数据库,使用MySql Improved方式连接,则
$db = ADONewConnection(‘mysqli’);
当你的程序在不同数据库间移植时,只需要改动此处的值就可以了,而其它程序完全不需要修改.
第三话 adodb.config.php文件
adodb.config.php文件位于ADOdb Lite的根目录.你可以使用像前面的例子那样配置ADOdb Lite,当然.如果使用了这个配置文件,ADOdb Lite将能够为你提供更方便的应用.比如当程序移植的时候,只要修改这个配置文件,而不必修改你的程序即可.
原adodb.config.php文件中的内容如下
根据原文件的提示,我们对它进行修改.新的adodb.config.php文件内容,例如:
mysql是我要使用的数据库种类,它的值见上表的对应关系.
root是数据库用户名
999999是我设置的口令
localhost是数据库的主机名
newdb是要使用的数据库名
debug相当于前例的$db->debug=’true’,意为开启debug功能.不开启的话就不写?debug
这时,PHP程序创建连接的时候只需要这样写
例如:
Execute($query);
echo $rs->RecordCount();
$db->Close();
?>
运行当前程序后,输出
(mysql): select * from TestTable
Error (0):
1
(mysql)表示你使用的数据库,后面跟着你运行的sql语句,
Error(0)表示无错,下面的1是echo出的结果,表示该查询语句影响到了1条数据.
是不是使用配置文件进行ADOdb Lite的配置对程序的开发更方便呢?
新的1.42版中,增加了adodblite新的debug控制台
$db->debug_console = true;
(二) ADODB Lite的指令
数据库支持的指令有
$db->Affected_Rows()
$db->Close()
$db->Concat($string, $string)
$db->ErrorMsg()
$db->ErrorNo()
$db->Execute($sql, [$inputarray])
$db->GetAll($sql)
$db->GetArray($sql)
$db->IfNull($field, $ifNull)$db->Insert_ID()
$db->Insert_ID()
$db->IsConnected()
$db->qstr($string, [$magic_quotes])
$db->Qmagic($string)
$db->SelectDB($dbname)
$db->SelectLimit( $sql, [nrows], [offset], [$inputarray] ) 此命令仅MySql/MySqli/MySqlt/SqLite/PostGres7/MsSql/MsSqlpo/Sybase 这几个数据库支持
$db->Version()
查询结果支持的指令有
$result->Close()
$result->EOF()
$result->EOF
$result->FetchField($fieldOffset)
$result->FieldCount()
$result->Fields([column])
$result->Fields
$result->GetAll([nRows])
$result->GetArray([nRows])
$result->GetRows([nRows])
$result->Move([row])
$result->MoveFirst()
$result->MoveLast()
$result->MoveNext()
$result->RecordCount()
以上内容直接来自ADOdb Lite的使用文档adodb\documentation\adodb_lite_commands.html
在此强调一点,一定要注意大小写!否则可能引起死循环之类的问题.ADOdb Lite是区分大小写的.
这些命令怎么用呢?望文生意吧.呵呵.
如果你原来写过asp程序,会发现这些指令除了大小写外,拼写和ASP中使用ADO操作数据库的指令一样.
这会让你很容易上手.
好了,不废话了,下面说说怎么使用ADOdb Lite改写原来的PHP程序.
例1.普通的查询操作.
原php程序:
改写的PHP程序
Connect(‘localhost’ ,’root’, ‘password’, ‘newdb’);
$sql=”select * from table”;
$rs=$db->Execute($sql);
while(!$rs->EOF()){
echo $rs->fields[“ID”];
$rs->MoveNext();
}
$db->Close();
?>
——————————————————————————————
请注意,$rs->fields,要使用小写的,官方文档中使用“Fields”是不对的。