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 dba_open()
3.1.1 说明:
resource dba_open ( 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的扩展用锁来防止同时操作,请看下表:
DBA locking | ||||||||
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 |
- ok: the second call will be successfull. 第二次调用将会成功
- 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, 失败返回 false
3.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 说明
3.2.2 参数
string $key key值,假如key存在的话,函数返回false
string $value 想要插入的值
resource $handle 数据库的handler, 通过dba_open() , dba_popen() 返回
3.2.3 返回值
如果成功则返回 TRUE,失败则返回 FALSE
3.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 dba_fetch ( string $key , resource $handle ) 通过指定的key获取数据
3.3.2 参数
string $key key值
resource $handle 数据库的handler,通过dba_open(), dba_popen() 返回
3.3.3 返回值
如果key对应的value值存在,返回data字符串,否则返回FALSE
3.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 dba_delete ( string $key , resource $handle ) 通过指定的key删除数据库记录
3.4.2 参数
string $key key值, 如果key不存在,返回false
resource $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();