ホームページ >php教程 >php手册 >PHP で DBM をデータベースとして使用する (ソートを含む)

PHP で DBM をデータベースとして使用する (ソートを含む)

WBOY
WBOYオリジナル
2016-06-21 09:08:47938ブラウズ

並べ替え|データ|データベース

多くの CGI 言語の中でも、PHP はそのシンプルさと速度により徐々に成長しており、PHP を使用してプログラムを開発する人が増えています。一般に、PHP で使用されるデータベースはテキストと MYSQL の 2 つです。テキストデータベースは読み書きが遅く、データが一定量に達すると、速度が大幅に低下したり、崩壊したりすることがあります。 MYSQL は高速で強力ですが、一般的な空き領域は MYSQL をサポートしていないため、一般的な空き領域は MYSQL をサポートしていないためです (ホストを持っている友人は以下を読まないでください)
今日、著者は DBM データベース、DBM It を紹介します。バークレー大学によって開発されたファイル/テキスト データベースです。BSD システムにはインストールされていませんが、PHP4.03 には DBM サポートが追加されています。したがって、DBM は、PHP をサポートするほとんどのスペースでサポートされます (PHP をサポートするスペースの詳細については、www.zphp.com を参照してください)。以下では、PHP でのデータベースとしての DBM の使用方法を段階的に紹介します。あなたのスペースは DBM メソッドをサポートしています:
次のプログラムを入力してください:
------------------------------------- ---------- -------------
?> ---------- -----------------------------
dbmtest.php として保存し、実行します出力関数が定義されていないことを確認します。定義されていない場合は、おめでとうございます...

2. PHP で DBM を使用するための基本関数:
1. int dbmopen(string filepath, string mode);ここで、filepath は DBM データベースへのパスであり、mode には 4 つのパラメータがあります。「r」はデータベースを読み取り専用モードで開きます。「w」はデータベースを読み取り/書き込みモードで開きます。「c」はデータベースを読み取り専用モードで開きます。書き込みモードで、存在しない場合は作成します。「n」は既存のデータベースを削除し、読み取り/書き込みモードのデータベースで開きます。
2. boolean dbmclose(int handle); すでに開いている DBM データベースを閉じ、同時にハンドルを解放します。
3. string dbmfetch(int handle, string key); オープンされているハンドル データベースのキーに対応する値を取得します。
4. boolean dbmexists(int handle, string key); 開かれたハンドル データベースにキーが存在するかどうかを判断します。
5. string dbmfirstkey(int handle); 開かれたハンドル データベースの物理的な最初のキーを取得します。
6. string dbmnextkey(int handle, string key);
開かれたハンドル データベース内のキーに対応する次のキーを取得します (dbmnextkey と dbmfirstkey の 2 つの関数は dbm のトラバーサル検索を実現します!)
7. 、文字列キー、文字列値);
開いたハンドル データベースにキーを挿入し、そのキーがすでに存在する場合は false が返されます。
8. boolean dbmreplace(int handle, string key, string value);
すでに開いているハンドルデータベースのキーに対応する値を値に置き換えます。キーが存在しない場合は、作成に戻ります。
9. boolean dbmdelete(int handle, string key); 開かれたハンドル データベースのキーを削除します。


3. DBM を使用する際の注意点:
1. DBM データベースは、単純なキーと値の配置のみを備えています。以下に続きます (ここでは区切り文字として「|!:!|」を使用します)
Name|!:!|TelNo|!:!|MailAdd //名前、電話番号、メールアドレスは別々に保存されます
読み取り方法は次のとおりです。 :
-------------------------------------------------- -
$ data=explode('|!:!|'dbmfetch($dbmid,$key));
//$data[o] は名前に対応し、$data[1] は電話番号に対応します。 data[2]はメールアドレスに対応します
- -------------------------------------- ----------- -
2. DBM 自体は物理的な順序を持たずにデータを保存し、独自の処理を通じてのみソートできます (以下を参照)。
3. DBM はテキストとは異なります。このホストから別のホストに DB を転送すると、エラーが発生します。つまり、DB ファイルは一度作成されると転送できなくなります。
4. NT では DBM のキーに対応する値の長さは 1,000 文字を超えることはできないため、長さの問題があるものを保持するために DBM を NT で使用することはできません。
5. DBM での中国語キーの使用について: 筆者はキーとして中国語を使用した場合、キーが多すぎる (約 20) 場合、中国語では使用できません。検索を横断できないという問題が発生します。

4. DBM を使用して順序なしデータベースを作成する:
DBM を使用して順序なしデータベース (つまり、順序のないデータの概念) を作成するのは非常に簡単で、テキスト データベースよりもはるかに簡単です。たとえば、次のプログラムは、ユーザーがユーザー名を入力し、ユーザーの電話番号を入力できるようにします:
------------------------ -------- --------------------
if(isset($userid)){
$data=dbmopen("パス","r");
if(dbmexists($data,$userid))echo $no=dbmfetch($data,$userid);
else echo "UserID Error!";
dbmclose($data);
} else{
?>
ユーザー名を入力してください:

"submit" name="submit">

-------------------------- ------ -------------------

5. DBM を使用して順序付けされたデータベースを作成します:
DBM はデータをソートしないため、特定の順序で出力する一部のプログラム (先ほどのプログラムのように、すべてのユーザーの電話番号を表示する) では、手動でソートする必要があるため、作成者は以下の 2 つの方法を示しています。
1. データの並べ替えメソッド: このメソッドでは、順序を記録するためにキーに対応する値を特に使用します。そのキーは、sort の対応する値は次のとおりです:
data1 の key|data2 の key|data3 のキー。 |... ..|データ n のキー
データ n の長さは確実である必要があります (著者は時間メソッドを使用しており、次のプログラムでキーを生成できます:)
----------- ------- ----------------------------------
関数 getkey(){
$date =date("ymdHis");
$date を返す
} ---------------------------------- ----------- ----------
このようにして、getkey() を使用して 001203114950 のような 12 ビット キーを取得でき、各キーは独自のキーに対応しますvalue (ここではユーザーの電話番号); substr($sort ,$i*13,12) を使用すると、i 番目のユーザーのキーを読み取ることができます。リストを表示するコードは次のとおりです。 -------------------- -----------------------------
// まず、特別な num Record を開くことができます。
$data=dbmopen("path","r"); // データベースを開きます。 =dbmfetch($data,"sort"); //ソートを読み取ります
for($i=0;$i< $totaluser;$i++){
$key=substr($sort,$i*13,12); // キーを順番に取得します
$telno=dbmfetch($data,$key); // 対応するキーの値を読み取ります
echo $i+1." ユーザーの TelNO は ".$telno."
";
}
dbmclose($data);
---------------- -------------------- --------------------

2. 配列の並べ替え方法: こちら ウーシャン兄弟のおかげで、並べ替えに配列を使用することを思い出しました。配列ソートの基本原理は、DBM データベース全体の各キーを配列に読み取り、usort() などの関数を使用して各キーのサイズに従ってソートして出力することです。
キーサイズはソートされているので、最初に追加したキーよりも後から追加したキーが大きい限り、後から参加した人が先に表示されます。キーとして使用されます。
以下はリストコードです:
----------------------------------------------------- -------- --------
$data=dbmopen("path","r"); // データベースを開きます
$i=1; ($data);$key;$ key=dbmnextkey($data,$key)){
$sort[$i]=$key
} //すべてのキーを取得するためのトラバース
usort($sort) ); //安全なサイズソート
for ($i=0;$iecho $i+1." ユーザーの TelNO は ".dbmfetch($data,$sort[$i ])."
;
dbmclose($data); --------- -----------
上記の 2 つのメソッドは、実行時に (ソート用に) メモリを占有します。最初のメソッドは 2 番目のメソッドよりも少し大きくなりますが、計算量、最初の方法は 2 番目の方法よりも少ないので、どちらの方法を使用するかは自由です (興味がある場合は、両方の CPU 使用率を試してみることができます)。






声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。