仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1498|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之PHP中利用DBM作为数据库(包含排序)

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:17:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
php   manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。排序|数据|数据库   在浩瀚CGI言语中,PHP以其复杂,疾速的长处入手下手逐步生长,利用PHP开辟法式的人也愈来愈多,而普通PHP用的数据库就两种:文本和MYSQL。文本数据库读、写速度慢,当数据抵达必定量时就会大大的下降速度甚至溃散!而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[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)就会呈现没法遍历搜刮的成绩!

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);
----------------------------------------------------
以上两种办法在运转时占用内存(用于排序)第一种比第二种要大一点,不外关于运算量来说,第一种办法则要小于第二种,至于想用哪一种办法就随你意了(假如你乐趣,可以尝尝二者的CPU占用率)。  刚开始写页面程序,调试完书中的例子。然后就可以尝试编写留言板了,
海妖 该用户已被删除
沙发
发表于 2015-2-4 10:48:40 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
透明 该用户已被删除
板凳
发表于 2015-2-8 03:26:51 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小魔女 该用户已被删除
地板
发表于 2015-2-14 12:06:13 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
老尸 该用户已被删除
5#
发表于 2015-3-4 06:13:14 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
兰色精灵 该用户已被删除
6#
发表于 2015-3-11 05:21:04 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
谁可相欹 该用户已被删除
7#
发表于 2015-3-17 21:09:31 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-21 08:03:17 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
柔情似水 该用户已被删除
9#
发表于 2015-3-22 17:44:59 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
深爱那片海 该用户已被删除
10#
发表于 2015-4-3 00:22:29 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
若天明 该用户已被删除
11#
发表于 2015-4-3 22:44:08 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
再见西城 该用户已被删除
12#
发表于 2015-4-6 10:43:51 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
因胸联盟 该用户已被删除
13#
发表于 2015-4-20 03:21:42 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
不帅 该用户已被删除
14#
发表于 2015-5-4 08:51:00 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
蒙在股里 该用户已被删除
15#
发表于 2015-5-9 06:35:39 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
小妖女 该用户已被删除
16#
发表于 2015-5-11 12:47:50 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
简单生活 该用户已被删除
17#
发表于 2015-6-4 01:13:02 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
再现理想 该用户已被删除
18#
发表于 2015-6-8 10:24:54 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
精灵巫婆 该用户已被删除
19#
发表于 2015-6-17 01:30:49 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
灵魂腐蚀 该用户已被删除
20#
发表于 2015-6-29 23:34:31 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 03:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表