PHP网站制作之在PHP中利用DBM作为数据库
另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。数据|数据库 在浩瀚CGI言语中,PHP以其复杂,疾速的长处入手下手逐步生长,利用PHP开辟法式的人也愈来愈多,而普通PHP用的数据库就两种:文本和MYSQL。文本数据库读、写速度慢,当数据抵达必定量时就会大大的下降速度甚至溃散!而MYSQL固然速度快,功效壮大,不外不是普通的专业爱号者所能用得起的,由于普通的收费空间都不撑持MYSQL(有主机的伴侣就不要往下看了)明天笔者引见的是DBM数据库,DBM是柏克莱大学开展的文件/文本型数据库,在BSD体系中已装置终了,即便没有装置,在PHP4.03中也到场了DBM的撑持。因而,在大部分撑持PHP的空间中都撑持DBM(撑持PHP的空间详见www.zphp.com)上面将分步引见在PHP利用DBM做为数据库:
1、判别你的空间是不是撑持DBM的办法:
输出上面的法式:
----------------------------------------------------
<?
echo dblist();
?>
----------------------------------------------------
保留为dbmtest.php,运转,看看是不是输入函数没有界说,假如不是,祝贺……
2、PHP利用DBM的根基函数:
1、int dbmopen(string filepath,string mode);
这个可以翻开一个DBM数据库,个中filepath为DBM数据库的途径,mode有4个参数:"r"以只读的体例翻开数据库;"w"以读写体例翻开数据库;"c"以读写体例翻开数据库,若不存在则创立;"n"删去现无数据库,以读写体例翻开数据库。
2、boolean dbmclose(int handle); 封闭一个已翻开了的DBM数据库,同时释放handle。
3、string dbmfetch(int handle,string key); 获得已翻开了的handle数据库的key所对应的值。
4、boolean dbmexists(int handle, string key); 判别在已翻开了的handle数据库中是不是存在key。
5、string dbmfirstkey(int handle); 获得已翻开了的handle数据库的物理第一个key。
6、string dbmnextkey(int handle,string key);
获得已翻开了的handle数据库中的key所对应的下一个key(就是dbmnextkey和dbmfirstkey两个函数完成了dbm的遍历搜刮!)
7、boolean dbminsert(int handle,string key,string value);
在已翻开了的handle数据库中拔出一个key,其对应的值为value,假如已存在key则前往false。
8、boolean dbmreplace(int handle, string key, string value);
在已翻开了的handle数据库中交换key所对应的值成为value,假如不存在key则前往创立。
9、boolean dbmdelete(int handle,string key);在已翻开了的handle数据库中删除key。
3、利用DBM的注重事项:
1、DBM数据库不像SQL,它只要纯真的key/Value的定位,假如你想贮存多种信息,只能将信息用一个分隔符来分隔,以下(这里用“|!:!|”做分隔符)
Name|!:!|TelNo|!:!|MailAdd //分离贮存了名字、德律风及邮箱
读取时办法以下:
----------------------------------------------------
$data=explode('|!:!|'dbmfetch($dbmid,$key));
//则$data对应名字,$data对应德律风,$data对应邮箱
----------------------------------------------------
2、DBM自己贮存数据没有任何物理按次,只能经由过程本人的处置(见下文)来排序!
3、DBM不像文本,把一个db从这个主机转移到另外一个主机上是会失足的,即一旦创立一个db文件,就不克不及转移!
4、DBM在NT上面一个key对应的值的长度不克不及超越1k个字符,故在NT下不克不及利用DBM保存一些有长度成绩的器材!
5、关于DBM中利用中文的KEY:DBM的key不克不及利用中文,笔者在一共法式中试过,假如利用中文作为key的话当key一多(大约20)就会呈现没法遍历搜刮的成绩!
4、用DBM做无序数据库:
用DBM做无序数据库(即数据无按次概念)非常复杂,比文本数据库要复杂的多!好比上面是一个让用户输出用户名后给出用户德律风的法式:
----------------------------------------------------
<?
if(isset($userid)){
$data=dbmopen("path","r");
if(dbmexists($data,$userid))echo $no=dbmfetch($data,$userid);
else echo "UserID Error!";
dbmclose($data);
}else{
?>
请输出您的用户名:
<form action=<?echo$PHP_SELF;?>
<input type="text" name="userid">
<input type="submit" name="submit"></form><?}?>
----------------------------------------------------
5、用DBM做有序数据库:
由于DBM没有对数据停止排序,所以关于一些按必定按次输入的法式(如方才的法式改成显示一切用户的德律风)则对照辣手,需求工资排序,上面笔者给出两种办法:
1、排序数据法:在这类办法里咱们专门用一个key所对应的值来纪录按次,谁人key咱们工资定名为sort,sort对应值以下:
data1's key|data2's key|data3's key|........|data n's key
个中data n's dey的长度需求必定(笔者利用的是工夫办法,以下法式可以生成key:)
----------------------------------------------------
function getkey(){
$date=date("ymdHis");
return $date;
}
----------------------------------------------------
如许用getkey()可以失掉一个相似001203114950的12位key,而每一个key就对应它本人的值(在这里用户的德律风);而用substr($sort,$i*13,12)就能够读出第i个用户的key,上面是显示列表的代码:
----------------------------------------------------
<?
//起首要晓得有几何个用户,可以专门开一个num来纪录
$data=dbmopen("path","r"); //翻开数据库
$sort=dbmfetch($data,"sort"); //读取sort
for($i=0;$i<$totaluser;$i++){
$key=substr($sort,$i*13,12); //安按次获得key
$telno=dbmfetch($data,$key); //读出key对应的value
echo $i+1." User's TelNO is ".$telno."<br>";
}
dbmclose($data);
?>
----------------------------------------------------
2、数组排序法:在这里感激无伤兄,是他让笔者想升引数组来排序的。数组排序的根基道理是将全部DBM数据库的每条key读入数组,然后依据每一个key的巨细利用usort()等函数排序然后输入。
由于是对key的巨细排序,所以key的长度没有甚么限制,只需包管后到场的key大于先到场的key就能够完成先显示后到场的人,这里用time()来作为key。
上面是列表代码:
----------------------------------------------------
$data=dbmopen("path","r"); //翻开数据库
$i=1;
for($key=dbmfirstkey($data);$key;$key=dbmnextkey($data,$key)){
$sort[$i]=$key;
$i++;
} //遍历获得一切的key
usort($sort); //安巨细排序
for($i=0;$i<count($sort);$i++)
echo $i+1." User's TelNO is ".dbmfetch($data,$sort[$i])."<br>";
dbmclose($data);
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后... 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 爱上php,他也会爱上你。 当然这种网站的会员费就几十块钱。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
页:
[1]
2