PHP中使用DBM作为数据库(包括排序)_PHP
在众多CGI语言中,PHP以其简单,快速的优点开始逐渐成长,使用PHP开发程序的人也越来越多,而一般PHP用的数据库就两种:文本以及MYSQL。文本数据库读、写速度慢,当数据到达一定量时就会大大的降低速度乃至崩溃!而MYSQL虽然速度快,功能强大,因为一般的免费空间都不支持MYSQL,因为一般的免费空间都不支持MYSQL(有主机的朋友就不要往下看了)
今天笔者介绍的是DBM数据库,DBM是柏克莱大学发展的文件/文本型数据库,在BSD系统中已经安装完毕,即使没有安装,在PHP4.03中也加入了DBM的支持。因此,在大部份支持PHP的空间中都支持DBM(支持PHP的空间详见www.zphp.com)下面将分步介绍在PHP使用DBM做为数据库:
一、判断你的空间是否支持DBM的方法:
输入下面的程序:
----------------------------------------------------
echo dblist();
?>
----------------------------------------------------
保存为dbmtest.php,运行,看看是否输出函数没有定义,如果不是,恭喜……
二、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。
三、使用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);
else echo "UserID Error!";
dbmclose($data);
}else{
?>
请输入您的用户名:
----------------------------------------------------
五、用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$key=substr($sort,$i*13,12); //安顺序取得key
$telno=dbmfetch($data,$key); //读出key对应的value
echo $i+1." User's TelNO is ".$telno."
";
}
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
";
dbmclose($data);
----------------------------------------------------
以上两种方法在运行时占用内存(用于排序)第一种比第二种要大一点,不过对于运算量来讲,第一种方法则要小于第二种,至于想用哪种方法就随你意了(如果你兴趣,可以试试两者的CPU占用率)。
笔者在经过了N次(N>50)实验后完成了这篇文章仅以此献给穷苦的仍在用txt的朋友们相信也不是所有看CN的人都有自己的主机!如果有什么不明白的,来这里看看:www.zphp.com。
笔者不是什么高手,不过因为几乎找不到在PHP上使用DBM数据库的资料(包括英文资料,不过Perl方面的却不少)。最好留一个笔者用DBM写的论坛,大家可以试试速度:www.zphp.com/demo/dbmbbs/ !

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











クラウド ストレージは今日、私たちの日常生活や仕事に欠かせない部分になっています。中国有数のクラウド ストレージ サービスの 1 つである Baidu Netdisk は、強力なストレージ機能、効率的な伝送速度、便利な操作体験により多くのユーザーの支持を得ています。また、重要なファイルのバックアップ、情報の共有、オンラインでのビデオの視聴、または音楽の聴きたい場合でも、Baidu Cloud Disk はニーズを満たすことができます。しかし、Baidu Netdisk アプリの具体的な使用方法を理解していないユーザーも多いため、このチュートリアルでは Baidu Netdisk アプリの使用方法を詳しく紹介します。まだ混乱しているユーザーは、この記事に従って詳細を学ぶことができます。 Baidu Cloud Network Disk の使用方法: 1. インストール まず、Baidu Cloud ソフトウェアをダウンロードしてインストールするときに、カスタム インストール オプションを選択してください。

NetEase Mailbox は、中国のネットユーザーに広く使用されている電子メール アドレスとして、その安定した効率的なサービスで常にユーザーの信頼を獲得してきました。 NetEase Mailbox Master は、携帯電話ユーザー向けに特別に作成された電子メール ソフトウェアで、電子メールの送受信プロセスが大幅に簡素化され、電子メールの処理がより便利になります。 NetEase Mailbox Master の使い方と具体的な機能について、以下ではこのサイトの編集者が詳しく紹介しますので、お役に立てれば幸いです。まず、モバイル アプリ ストアで NetEase Mailbox Master アプリを検索してダウンロードします。 App Store または Baidu Mobile Assistant で「NetEase Mailbox Master」を検索し、画面の指示に従ってインストールします。ダウンロードとインストールが完了したら、NetEase の電子メール アカウントを開いてログインします。ログイン インターフェイスは次のとおりです。

MetaMask (中国語ではリトル フォックス ウォレットとも呼ばれます) は、無料で評判の高い暗号化ウォレット ソフトウェアです。現在、BTCC は MetaMask ウォレットへのバインドをサポートしており、バインド後は MetaMask ウォレットを使用してすぐにログイン、値の保存、コインの購入などが可能になり、初回バインドで 20 USDT のトライアル ボーナスも獲得できます。 BTCCMetaMask ウォレットのチュートリアルでは、MetaMask の登録方法と使用方法、および BTCC で Little Fox ウォレットをバインドして使用する方法を詳しく紹介します。メタマスクウォレットとは何ですか? 3,000 万人を超えるユーザーを抱える MetaMask Little Fox ウォレットは、現在最も人気のある暗号通貨ウォレットの 1 つです。無料で使用でき、拡張機能としてネットワーク上にインストールできます。

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

Xiaomi 車用ソフトウェアは、車のリモート制御機能を提供し、ユーザーが携帯電話やコンピュータを介して車両のドアや窓の開閉、エンジンの始動、車両のエアコンやオーディオの制御など、車両を遠隔制御できるようにします。このソフトウェアの使い方や内容について、一緒に学びましょう。 Xiaomi Auto アプリの機能と使用方法の包括的なリスト 1. Xiaomi Auto アプリは 3 月 25 日に Apple AppStore で公開され、Android スマートフォンのアプリストアからダウンロードできるようになりました; 車の購入: 主要なハイライトと技術パラメータについて学びますXiaomi Auto のサービスを利用して、試乗の予約をし、Xiaomi 車の設定と注文を行い、車の受け取りの To-Do 項目のオンライン処理をサポートします。 3. コミュニティ: Xiaomi Auto ブランド情報を理解し、車の経験を交換し、素晴らしいカーライフを共有します; 4. 車の制御: 携帯電話はリモコン、遠隔制御、リアルタイム セキュリティ、簡単です。

パッチ不可能な Yubico の 2 要素認証キーの脆弱性により、ほとんどの Yubikey 5、セキュリティ キー、および YubiHSM 2FA デバイスのセキュリティが破られています。 Feitian A22 JavaCard および Infineon SLB96xx シリーズ TPM を使用するその他のデバイスも脆弱です。すべて

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます
