ADOdb的学习资料
时间:2006-10-11 来源:felixtong
ADOdb(Active Data Object DataBase)是一套用于PHP数据库操作的类库,它纠正了PHP访问不同数据库要调用不同数据库接口函数的不便。使用它提供的统一类库成员方法,可以使开发者能比较容易地切换不同类型的数据库,而不需要修改源程序。类似于Windows平台下的ADO,为开发者提供了虚拟数据库访问层,统一了不同数据库接口方式。
先来看看ADOdb有何优点
1.支持的数据库类型多得惊人:MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, 和通常的 ODBC, ODBTP。支持的数据库的完整列表(http://phplens.com/adodb/supported.databases.html)
2.其操作方式与语法功能类似于M$的ADO,对windows asp环境下的程序员有不小的吸引.
3.与其他php类库专注于select语法不同,ADOdb提供了对于insert、update的全面支持,还提供了对不同数据库下日期、字符串数据类型格式的统一转换函数。
4.可以对查询的结果进行缓存,通过减少相同的查询,可以在一定程度上提高数据库的执行效率。
5.可以进行事务处理,即对一组数据库操作进行统一控制。通过ADOdb在代码级上的有效控制,对事务的成功和失败作出相应处理,即事务各项都正确时,结束事务;有错误发生时,纠正所有改动,恢复原来状态。
简单介绍下ADOdb的安装和使用
1.使用环境
a.php环境,因为它本来就是基于PHP语言的。
具体的说:
PHP4.0.5以后版本支持ADOdb 4.61
PHP4.1.0以后版本支持ADOdb 4.63(目前2005-05最高版本)
b.Python环境,Python2.3以后版本支持
2.如何得到ADOdb?
PHP版本
http://sourceforge.net/project/showfiles.php?group_id=42718
Python版本
http://sourceforge.net/project/showfiles.php?group_id=42718
3.如何调用ADOdb
通常情况只需要调用adodb/adodb.inc.php文件,它包含了所有数据库类库的操作方法。当然你可以只包含一个确定的数据库类库,如adodb/driver/adodb-???.inc.php
针对某些特殊形式的使用,你可能需要包含其他一些文件,如下:
adodb-session.php: 将session存入数据库中来维护运用
adodb-pager.inc.php: 便于制作分页显示效果
adodb-errorhandler.inc.php: 可以自定义错误处理讯息
adodb-pear.inc.php: 可以用 PHP4 的 PEAR DB 语法来使用ADODB
tohtml.inc.php: 可帮您在程序代码中,方便将取出的记录,转成HTML的表格(table)来显示
toexport.inc.php: 可让将数据库查询结果方便以CSV等文本数据格式输出
rsfilter.inc.php: 便于使用记录之前,做预先过滤处理
pivottable.inc.php: 可让您使用 pivot table 功能(俗称 cross-tabulations)
如下
include_once('adodb/adodb.inc.php');
或
include_once('adodb/drivers/adodb-mysql.inc.php');
或
include('adodb/adodb.inc.php');
include('adodb/toexport.inc.php'); //引入输出 CSV 格式功能
4.初始化ADOdb
在调用ADOdb类库文件之后,就可以初始化ADOdb类库,进行数据库链接了。有两种方式连接数据库,以mysql数据库为例
a.传统方式
如下:
//建立联机对象
$conn = &ADONewConnection('mysql');
$mch="localhost";
$user="root";
$pwd="pwd";
$database="test";
$conn->Connect($mch, $user, $pwd, $database);
或
$conn->PConnect($mch, $user, $pwd, $database);
b.DSN方式
ADOdb 4.51以后,引入了DSN(Data Source Name)初始化方式,即将数据库连接语句按指定格式写在一个字符串内,以此为参数来初始化连接。
如下:
$dsn = 'mysql://root:pwd@localhost/test';
$db = NewADOConnection($dsn);
或
//数据库永久连接
$dsn2 = 'mysql://root:pwd@localhost/test?persist';
5.基本概念
ADOdb使用中有两个基本对象
ADOConnection 和 ADORecordSet
前者是数据库的连接对象,处理与数据库连接相关的事务
后者是记录集对象,指向当前查询结果的记录集,其实它就是由ADOConnection执行查询语句返回的数据集类
6.基本方式
Connect, PConnect, NConnect
Execute, CacheExecute
SelectLimit, CacheSelectLimit
MoveNext, Close
qstr, Affected_Rows, Insert_ID
以上是ADOdb最常用的方法,也是ADOdb类核心层方法,效率很高,使用他们时不要犹豫。
还有些常用的方法,如
$ADORecordSet->fields['FieldName']
$ADORecordSet->FetchRow()
$ADOConnection->GetOne($sql);//取返回记录集第一行的第一个字段
$ADOConnection->GetAll($sql);//返回两维数组,第一维是记录索引,第二维是记录的字段数组
常用操作
1. 连接数据库:
debug=true;# 打开调试开关
if (!$DB) die("Connection failed");# 判断是否连接成功
?>
2. 读出表纪录
Execute($sql); // 执行sql语句
//$cnt = 0;
while ($arr = $rs->fetchRow()) // 这里的FetchRow()相当于:mysql_fetch_array()
{
echo $arr[id].":". $arr["user"] ."
";
//print_r($arr); print "
";
}
?>
3. 读出单条纪录:
GetRow("select * from user where id=21 "); // 使用GetRow()
echo $row[id] .":". $row[user]."
";
?>
4. 读出纪录所在纪录位置:
GetOne("select * from user where id =22 ");
echo $val."
"; // 这里val = 22,表示第22条纪录的位置;
?>
5. GetAll()
GetAll("select * from user where id =23 ");
foreach ($arr as $key => $values)
{
//echo $key .":". $values ."
";
echo $values[id] .":". $values[user] ."
";
}
?>
6. GetAssoc()
GetAssoc("select * from user");
//print_r($arr);
echo "
";
foreach ($arr as $i => $m)
{
echo $m[id] .":". $m[user] ."
";
}
?>
7. 使用缓存:
CacheExecute(60, "select * from user where id=22 ");
while ($row = $rs->FetchRow())
{
echo $row["id"] .":". $row["user"]."
";
}
?>
8.
Execute("select * from user");
if (!$re->EOF)
{
for ($i=0, $max = $re->FieldCount(); $i fields[$i].' ';
$re->MoveNext();
}
}
?>
9.
Execute("select * from user");
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $DB->Execute("select * from user");
print_r($rs1->fields);
foreach ($rs1->fields as $key => $value);
{
echo "
". $key .":". $value ."
";
}
echo "
";
print_r($rs2->fields);
echo "
". $rs2->fields['user'];
?>
Output:
Array ( [0] => 33 [1] => N [2] => 1122475990 )
2:1122475990
Array ( [id] => 33 [flag_deleted] => N [user] => 1122475990 )
1122475990
10. 统计sql的纪录数:
Execute("select * from user");
$record = $re->RecordCount();
echo $record;
?>
11. 获取插入后的那个id:
Execute($sql);
echo $DB->Insert_ID() ."
";
?>
12. 传回被update或者insert以及delete的列数;
Execute("update user set flag_deleted='Y' where idAffected_Rows();// 传回被update或者insert以及delete的列数;
?>
13. Select指令的Limit及Top支援
ADODB有個$connection->SelectLimit($sql,$nrows,$offset)函數讓你擷取recordset的部分集合,這是採用Microsoft產品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT...LIMIT用法的優點,即使原來的資料庫並沒有提供此用法,本函數也模擬提供該使用方式。
快取支援
ADODB允許你在你的檔案系統中暫存recordset的資料,並且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之後,才真正去做資料庫的查詢以節省時間。
SelectLimit($sql, 2,1);
while ($row = $re->FetchRow())
{
echo $row['id'] .":". $row['user'] ."
";
}
echo "";
?>
先来看看ADOdb有何优点
1.支持的数据库类型多得惊人:MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP, 和通常的 ODBC, ODBTP。支持的数据库的完整列表(http://phplens.com/adodb/supported.databases.html)
2.其操作方式与语法功能类似于M$的ADO,对windows asp环境下的程序员有不小的吸引.
3.与其他php类库专注于select语法不同,ADOdb提供了对于insert、update的全面支持,还提供了对不同数据库下日期、字符串数据类型格式的统一转换函数。
4.可以对查询的结果进行缓存,通过减少相同的查询,可以在一定程度上提高数据库的执行效率。
5.可以进行事务处理,即对一组数据库操作进行统一控制。通过ADOdb在代码级上的有效控制,对事务的成功和失败作出相应处理,即事务各项都正确时,结束事务;有错误发生时,纠正所有改动,恢复原来状态。
简单介绍下ADOdb的安装和使用
1.使用环境
a.php环境,因为它本来就是基于PHP语言的。
具体的说:
PHP4.0.5以后版本支持ADOdb 4.61
PHP4.1.0以后版本支持ADOdb 4.63(目前2005-05最高版本)
b.Python环境,Python2.3以后版本支持
2.如何得到ADOdb?
PHP版本
http://sourceforge.net/project/showfiles.php?group_id=42718
Python版本
http://sourceforge.net/project/showfiles.php?group_id=42718
3.如何调用ADOdb
通常情况只需要调用adodb/adodb.inc.php文件,它包含了所有数据库类库的操作方法。当然你可以只包含一个确定的数据库类库,如adodb/driver/adodb-???.inc.php
针对某些特殊形式的使用,你可能需要包含其他一些文件,如下:
adodb-session.php: 将session存入数据库中来维护运用
adodb-pager.inc.php: 便于制作分页显示效果
adodb-errorhandler.inc.php: 可以自定义错误处理讯息
adodb-pear.inc.php: 可以用 PHP4 的 PEAR DB 语法来使用ADODB
tohtml.inc.php: 可帮您在程序代码中,方便将取出的记录,转成HTML的表格(table)来显示
toexport.inc.php: 可让将数据库查询结果方便以CSV等文本数据格式输出
rsfilter.inc.php: 便于使用记录之前,做预先过滤处理
pivottable.inc.php: 可让您使用 pivot table 功能(俗称 cross-tabulations)
如下
include_once('adodb/adodb.inc.php');
或
include_once('adodb/drivers/adodb-mysql.inc.php');
或
include('adodb/adodb.inc.php');
include('adodb/toexport.inc.php'); //引入输出 CSV 格式功能
4.初始化ADOdb
在调用ADOdb类库文件之后,就可以初始化ADOdb类库,进行数据库链接了。有两种方式连接数据库,以mysql数据库为例
a.传统方式
如下:
//建立联机对象
$conn = &ADONewConnection('mysql');
$mch="localhost";
$user="root";
$pwd="pwd";
$database="test";
$conn->Connect($mch, $user, $pwd, $database);
或
$conn->PConnect($mch, $user, $pwd, $database);
b.DSN方式
ADOdb 4.51以后,引入了DSN(Data Source Name)初始化方式,即将数据库连接语句按指定格式写在一个字符串内,以此为参数来初始化连接。
如下:
$dsn = 'mysql://root:pwd@localhost/test';
$db = NewADOConnection($dsn);
或
//数据库永久连接
$dsn2 = 'mysql://root:pwd@localhost/test?persist';
5.基本概念
ADOdb使用中有两个基本对象
ADOConnection 和 ADORecordSet
前者是数据库的连接对象,处理与数据库连接相关的事务
后者是记录集对象,指向当前查询结果的记录集,其实它就是由ADOConnection执行查询语句返回的数据集类
6.基本方式
Connect, PConnect, NConnect
Execute, CacheExecute
SelectLimit, CacheSelectLimit
MoveNext, Close
qstr, Affected_Rows, Insert_ID
以上是ADOdb最常用的方法,也是ADOdb类核心层方法,效率很高,使用他们时不要犹豫。
还有些常用的方法,如
$ADORecordSet->fields['FieldName']
$ADORecordSet->FetchRow()
$ADOConnection->GetOne($sql);//取返回记录集第一行的第一个字段
$ADOConnection->GetAll($sql);//返回两维数组,第一维是记录索引,第二维是记录的字段数组
常用操作
1. 连接数据库:
debug=true;# 打开调试开关
if (!$DB) die("Connection failed");# 判断是否连接成功
?>
2. 读出表纪录
Execute($sql); // 执行sql语句
//$cnt = 0;
while ($arr = $rs->fetchRow()) // 这里的FetchRow()相当于:mysql_fetch_array()
{
echo $arr[id].":". $arr["user"] ."
";
//print_r($arr); print "
";
}
?>
3. 读出单条纪录:
GetRow("select * from user where id=21 "); // 使用GetRow()
echo $row[id] .":". $row[user]."
";
?>
4. 读出纪录所在纪录位置:
GetOne("select * from user where id =22 ");
echo $val."
"; // 这里val = 22,表示第22条纪录的位置;
?>
5. GetAll()
GetAll("select * from user where id =23 ");
foreach ($arr as $key => $values)
{
//echo $key .":". $values ."
";
echo $values[id] .":". $values[user] ."
";
}
?>
6. GetAssoc()
GetAssoc("select * from user");
//print_r($arr);
echo "
";
foreach ($arr as $i => $m)
{
echo $m[id] .":". $m[user] ."
";
}
?>
7. 使用缓存:
CacheExecute(60, "select * from user where id=22 ");
while ($row = $rs->FetchRow())
{
echo $row["id"] .":". $row["user"]."
";
}
?>
8.
Execute("select * from user");
if (!$re->EOF)
{
for ($i=0, $max = $re->FieldCount(); $i fields[$i].' ';
$re->MoveNext();
}
}
?>
9.
Execute("select * from user");
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $DB->Execute("select * from user");
print_r($rs1->fields);
foreach ($rs1->fields as $key => $value);
{
echo "
". $key .":". $value ."
";
}
echo "
";
print_r($rs2->fields);
echo "
". $rs2->fields['user'];
?>
Output:
Array ( [0] => 33 [1] => N [2] => 1122475990 )
2:1122475990
Array ( [id] => 33 [flag_deleted] => N [user] => 1122475990 )
1122475990
10. 统计sql的纪录数:
Execute("select * from user");
$record = $re->RecordCount();
echo $record;
?>
11. 获取插入后的那个id:
Execute($sql);
echo $DB->Insert_ID() ."
";
?>
12. 传回被update或者insert以及delete的列数;
Execute("update user set flag_deleted='Y' where idAffected_Rows();// 传回被update或者insert以及delete的列数;
?>
13. Select指令的Limit及Top支援
ADODB有個$connection->SelectLimit($sql,$nrows,$offset)函數讓你擷取recordset的部分集合,這是採用Microsoft產品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT...LIMIT用法的優點,即使原來的資料庫並沒有提供此用法,本函數也模擬提供該使用方式。
快取支援
ADODB允許你在你的檔案系統中暫存recordset的資料,並且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之後,才真正去做資料庫的查詢以節省時間。
SelectLimit($sql, 2,1);
while ($row = $re->FetchRow())
{
echo $row['id'] .":". $row['user'] ."
";
}
echo "";
?>
相关阅读 更多 +