php操作dba的总结笔记
2011-06-01 18:43
976 查看
1.简介Database (dbm-style) Abstraction Layer
这些函数是建立在访问 Berkeley DB (伯克利数据库)的基础之上。目前 PHP 支持的 DBA 数据库包括:
dbm:柏克莱发展的最早期 DBA 数据库。
ndbm:较新且较有弹性的 DBA。
gdbm:GNU 发展的 DBA,ftp://ftp.gnu.org/pub/gnu/gdbm/
db2:由 Sleepycat 软件开发的 DB2 (非 IBM 的 DB2),http://www.sleepycat.com
db3:由 Sleepycat 软件开发的 DB3。
db4:由 Sleepycat 软件开发的 DB4,从php4.3.2开始支持。
cdb:这是 qmail 作者开发快速可靠的 DBA,http://cr.yp.to/cdb.html.
cdb_make
flatfile
inifile
qdbm
2.相关的函数
dba_close —关闭dba数据库dba_delete —删除数据库中指定的key
dba_exists — 检查key是否存在
dba_fetch— 取得指定key的值
dba_firstkey — 获取第一个key
dba_handlers —列出所有可用的handler
dba_insert— 插入一条记录
dba_key_split— Splits a key in string representation into array representation
dba_list — 列出所有打开的数据库
dba_nextkey — 获取下一个key
dba_open —打开数据库
dba_optimize — 优化数据库
dba_popen — 使用长链接打开数据库
dba_replace —替换或者插入一条记录
dba_sync — 数据库同步
3.函数说明和范例
3.1 [b]dba_open()[/b]
[b]3.1.1 说明:[/b]
resource [b]dba_open[/b] ( string $path , string $mode [, string $handler [, mixed $... ]] 链接数据库3.1.2 参数
string $path :打开数据库所在的目录。string $mode : 打开的模式。第一个字符位置,'r’:读的方式; 'w’:写的方式; 'c’:读写方式,如果数据库不存在,则创建; 'n’:创建,以读写方式; 第二个字符位置,'l’:以锁定的方式,并生成一个.lck的文件; 'd’:锁定数据库自己。第三个字符位置:'t’:测试访问锁而且不想等待的时候,用此选项。
注意:对一个数据库文件,只能有一个人可以写操作。当dba数据库用在web服务或者多个需要写操作的时候,只能是一个接着一个,不能同时写,而且在写的时候,读也是不允许的。dba的扩展用锁来防止同时操作,请看下表:
already open | mode = "rl" | mode = "rlt" | mode = "wl" | mode = "wlt" | mode = "rd" | mode = "rdt" | mode = "wd" | mode = "wdt" |
---|---|---|---|---|---|---|---|---|
not open | ok | ok | ok | ok | ok | ok | ok | ok |
mode = "rl" | ok | ok | wait | false | illegal | illegal | illegal | illegal |
mode = "wl" | wait | false | wait | false | illegal | illegal | illegal | illegal |
mode = "rd" | illegal | illegal | illegal | illegal | ok | ok | wait | false |
mode = "wd" | illegal | illegal | illegal | illegal | wait | false | wait | false |
wait: the second call waits until dba_close() is called for the first. 第二次调用会等待,直到调用dba_close() 时候
false: the second call returns false. 第二次调用会返回false
illegal: you must not mix "l" and "d" modifiers for mode parameter. 'l' 和 'd'禁止混合使用在模式参数中
string $handler:使用的数据库
3.1.3 返回值
成功返回handler, 失败返回 false3.1.4 示例
//打开数据库test.db,使用的handler是db4 $dbh = dba_open( "./test.db", "c", "db4" ); if (!$dbh) { echo "Open db4 false./n"; exit; }
3.2 dba_insert()
3.2.1 说明
bool [b]dba_insert[/b] ( string $key , string $value , resource $handle ) 插入一条记录3.2.2 参数
string $key key值,假如key存在的话,函数返回falsestring $value 想要插入的值
resource $handle 数据库的handler, 通过dba_open() , dba_popen() 返回
3.2.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE3.2.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" ); dba_insert( "Sonic Screwdriver", "23.20", $dbh); dba_insert( "Tricorder", "55.50", $dbh); dba_insert( "ORAC AI", "2200.50", $dbh); dba_insert( "HAL 2000", "4500.50", $dbh); dba_close( $dbh );
3.3 dba_fetch()
3.3.1 说明
string [b]dba_fetch[/b] ( string $key , resource $handle ) 通过指定的key获取数据3.3.2 参数
string $key key值resource $handle 数据库的handler,通过dba_open(), dba_popen() 返回
3.3.3 返回值
如果key对应的value值存在,返回data字符串,否则返回FALSE3.3.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" ); $tricorder = dba_fetch('Tricorder', $dbh); dba_close($dbh);
3.4 dba_delete()
3.4.1 说明
bool [b]dba_delete[/b] ( string $key , resource $handle ) 通过指定的key删除数据库记录3.4.2 参数
string $key key值, 如果key不存在,返回falseresource $handle 数据库的handler, 通过调用 dba_open(), dba_popen() 返回
3.4.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE。3.4.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );
$res_del = dba_delete('Tricorder', $dbh);
dba_close();
3.5 dba_exists()
3.5.1 说明
bool [b]dba_exists[/b] ( string $key , resource $handle ) 检查key是否存在3.5.2 参数
string $key key值resource $handle 数据库handler, 通过调用 dba_open(), dba_popen() 函数返回
3.5.3 返回值
key存在返回TRUE, 否则返回FALSE3.5.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );
if (dba_exists('Tricorder', $dbh)) { $res_del = dba_delete('Tricorder', $dbh); }
dba_close();
3.6 dba_replace()
3.6.1 说明
bool [b]dba_replace[/b] ( string $key , string $value , resource $handle ) 替换或者插入记录3.6.2 参数
string $key 要替换的key,如果可以不存在,就插入string $value 要替换的值
resource $handle 数据库handler, 通过调用 dba_open(), dba_popen() 返回
3.6.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE。3.6.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );dba_insert("Tricorder", "55.50", $dbh);
dba_replace("Tricorder", "66.60", $dbh);
dba_close($dbh);
3.7 dba_firstkey()
3.7.1 说明
string [b]dba_firstkey[/b] ( resource $handle ) 获取数据库第一条记录的key值,从新设置库内部的指针3.7.2 参数
resource $handle 打开的数据库handler, 通过dba_open(), dba_popen() 返回3.7.3 返回值
成功返回key值,失败返回FALSE3.7.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );
echo dba_firstkey($dbh); // print "Sonic Screwdriver"
dba_close();
3.8 dba_nextkey()
3.8.1 说明
string [b]dba_nextkey[/b] ( resource $handle ) 获取当前指针指向的下一条记录的key值3.8.2 参数
resource $handle 打开的数据库handler, 通过调用dba_open(),dba_popen() 返回3.8.3 返回值
成功返回key值, 失败返回FALSE3.8.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );
echo dba_firstkey($dbh); //print "Sonic Screwdriver" echo dba_nextkey($dbh); //print "Tricorder"
dba_close();
3.9 dba_handlers()
3.9.1 说明
array [b]dba_handlers[/b] ([ bool $full_info ] ) 获取支持的handlers列表3.9.2 参数
bool $full_info 打开/关闭在结果集中显示全部信息,默认是FALSE3.9.3 返回值
返回一个数据库handler的数组,假如full_info设置为TRUE,返回的数组以handler名字为键值,版本信息为值,否则返回一个索引数组,3.9.4 示例
$dbh = dba_open( "./data/products", "c", "db4" ) or die( "Couldn't open database" );
print_r(dba_handlers());
// 默认参数,打印如下
Array
(
[0] => gdbm
[1] => cdb
[2] => cdb_make
[3] => db4
[4] => inifile
[5] => flatfile
)
print_r(dba_handlers(true));
// 参数为true,打印如下
Array
(
[gdbm] => GDBM version 1.8.3. 10/15/2002 (built Oct 22 2008 11:30:17)
[cdb] => 0.75, $Revision: 1.10.2.1.2.3 $
[cdb_make] => 0.75, $Revision: 1.9.2.1.2.1 $
[db4] => Berkeley DB 4.5.20: (September 20, 2006)
[inifile] => 1.0, $Revision: 1.14.2.1.2.3 $
[flatfile] => 1.0, $Revision: 1.14.2.1.2.1 $
)
3.10 dba_list()
3.10.1 说明
array [b]dba_list[/b] ( void ) 获取打开的所有数据库列表3.10.2 参数
void 无参数3.10.3 返回值
一个联合数组, resourceid => filename3.11 dba_popen()
3.11.1 说明
resource [b]dba_popen[/b] ( string $path , string $mode [, string $handler [, mixed $... ]] ) 以长链接方式打开数据库3.11.2 参数
参考dba_open() 函数3.11.3 返回值
成功返回数据库handler, 否则返回FALSE3.12 dba_optimize()
3.12.1 说明
bool [b]dba_optimize[/b] ( resource $handle ) 优化数据库3.12.2 参数
resource $handle 打开的数据库handler, 通过调用dba_open(),dba_popen()返回3.12.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE。3.13 dba_sync()
3.13.1 说明
bool [b]dba_sync[/b] ( resource $handle ) 数据库的同步3.13.2 参数
resource $handle 打开的数据库handler,通过调用dba_open(),dba_popen()返回3.13.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE。3.14 dba_close()
3.14.1 说明
void [b]dba_close[/b] ( resource $handle ) 关闭一个dba数据库3.14.2 参数
resource $handle 打开的数据库handler,通过调用dba_open(),dba_popen() 返回3.14.3 返回值
无4. 使用db4,和gdbm的效率比较
文件1,打开dba数据库,handler设置为db4文件2,打开dba数据库,handler设置为gdbm
文件1,文件2 循环写入100条记录,取出100记录,删除100条记录,所有的时间(单位为秒)如下:
文件1: 文件2:
写入时间::0.44283866882324 写入时间::2.2147016525269
读取时间::0.046286106109619 读取时间::0.037073612213135
删除时间: 0.00073099136352539 删除时间: 0.00082588195800781
由此看以看出: 读取,删除的时间基本差不多,使用db4写入的速度是比gdbm快5倍左右,
5.db 版本
db-4.5.20.NC.tar.gz下载地址:http://www.berkeleydb.net/download/index.html
相关文章推荐
- PHP使用PDO操作数据库笔记总结
- PHP初学笔记-cookie基本操作
- PHP文件读写操作相关函数学习资料笔记
- php笔记-比较散等有时间 做总结
- php和javascript中Json操作总结
- PHP_课堂总结笔记0614
- php学习笔记9--mongodb的入门知识点总结
- php学习笔记总结(转)
- PHP 操作文件的一些FAQ总结
- PHP文件操作个人总结
- PHP图形操作之Jpgraph学习笔记
- 用PHP通过LDAP操作活动目录(AD)的笔记
- Python学习总结笔记(1)--Dom XML操作
- 韩顺平PHP学习视频笔记整理004html基本操作
- php学习笔记--文件操作
- xml学习笔记③PHP DOM--对xml文件进行修改和删除操作
- PHP学习笔记(2)--PHP数据库操作基本知识
- Java POI 操作Excel总结笔记--使用配置和使用案例篇
- 【推荐】有趣儿的PHP文件操作常用函数总结