background image

立。
9、booleandbmdelete(inthandle,stringkey);在已经打开了的 handle 数据库中删除 key。

三、使用

DBM 的注意事项:

1、DBM 数据库不像 SQL,它只有单纯的 key/Value 的定位,如果你想储存多种信息,只能
将信息用一个分隔符来分开,如下

(这里用

“|!:!|”做分隔符)

Name|!:!|TelNo|!:!|MailAdd//分别储存了名字、电话及邮箱
读取时方法如下:
----------------------------------------------------
$data=explode('|!:!|'dbmfetch($dbmid,$key));
//则$data[o]对应名字,$data[1]对应电话,$data[2]对应邮箱
----------------------------------------------------
2、DBM 本身储存数据没有任何物理顺序,只能通过自己的处理(见下文)来排序!
3、DBM 不像文本,把一个 db 从这个主机转移到另一个主机上是会出错的,即一旦建立一

db 文件,就不能转移!

4、DBM 在 NT 下面一个 key 对应的值的长度不能超过 1k 个字符,故在 NT 下不能使用
DBM 保留一些有长度问题的东西!
5、关于 DBM 中使用中文的 KEY:DBM 的 key 不能使用中文,笔者在一共程序中试过,如
果使用中文作为

key 的话当 key 一多(大约 20)就会出现无法遍历搜索的问题!

四、用

DBM 做无序数据库:

DBM 做无序数据库(即数据无顺序概念)十分简单,比文本数据库要简单的多!比如

下面是一个让用户输入用户名后给出用户电话的程序:

<?
if(isset($userid)){
$data=dbmopen("path","r");
if(dbmexists($data,$userid))echo$no=dbmfetch($data,$userid);
elseecho"UserIDError!";
dbmclose($data);
}else{
?>
请输入您的用户名:
<formaction=<?echo$PHP_SELF;?>
<inputtype="text"name="userid">
<inputtype="submit"name="submit"></form><?}?>
----------------------------------------------------

五、用

DBM 做有序数据库:

因为

DBM 没有对数据进行排序,所以对于一些按一定顺序输出的程序(如刚才的程序改

为显示所有用户的电话)则比较棘手,需要人为排序,下面笔者给出两种方法:
1、排序数据法:在这种方法里我们专门用一个 key 所对应的值来记录顺序,那个 key 我们