IX. (dbm型の)データベース・アブストラクション レイヤー関数

これらの関数は、Berkeley DB 型データベースへのアクセス用の基本関数を 構成します。

これらの関数は、複数のファイルベースのデータベース用のアブストラクション ・レイヤーです。その機能は、Sleepycat Software's DB2サポート のような近代的なデータベースの機能のサブセットに制限されています。 (IBMのソフトウエアDB2と混同しないで下さい。このデータベースは、 ODBC 関数を通じてサポートされます。)

各機能の動作は、使用するデータベースの実装に依存します。 dba_optimize および dba_sync の ような関数は使用するデータベースに依存したことを行い、他のデータベース 用の機能は実行しません。

以下のハンドラがサポートされています。

  • dbm は最も古い(元祖の)Berkeley DB 型データベースです。 可能ならば使用しない方が良いでしょう。DB2 および gdbm に組み込まれている 互換性を保つための関数は、サポートされません。 これは、実装されているのがソースレベルの互換性のみであり、 元の dbm フォーマットを処理することができないためです。

  • ndbm は、より新型であり、dbmよりも柔軟です。 dbm 固有の制約の多くをまだ有しています。(そのため、 不人気です。)

  • gdbm は、GNU データベースマネージャ です。

  • db2 は、Sleepycat Software's DB2 です。これは、「スタンドアローンおよびクライアント/サーバー アプリケーションの両方で高性能な組込みデータベースサポートを提供する プログラム用ツールキット」として記述されています。

  • cdb は、固定データベースの作成・読込み用の高速で高信頼性の軽量型 パッケージです。 これは、qmail の作者によるものであり、ここ にあります。固定であるため、読込み操作のみがサポートされます。

例 1. DBA の例


<?php

$id = dba_open("/tmp/test.db", "n", "db2");

if(!$id) {
    echo "dba_open failed\n";
    exit;
}

dba_replace("key", "This is an example!", $id);

if(dba_exists("key", $id)) {
    echo dba_fetch("key", $id);
    dba_delete("key", $id);
}

dba_close($id);
?>

DBA は、バイナリセーフでありいかなる制限も受けません。 DBA は、使用するデータベースの実装による全ての制約を継承します。

全てのファイルベースのデータベースは、完全に使用可能なものについて 新規に作成されたデータベースのファイルモードを設定する手段を、 提供する必要があります。 ファイルモードは、通常 dba_open または dba_popen に4番目の引数として渡されます。

dba_firstkey および dba_nextkey 関数を用いて連続的に全てのエントリにアクセスすることができます。 アクセスする際にデータベースを変更できない可能性があります。

例 2. データベースに連続アクセス


<?php

# ...データベースをオープンする...

$key = dba_firstkey($id);

while($key != false) {
    if(...) { # 他の操作を後で行うためにキーを記憶する
        $handle_later[] = $key;
    }
    $key = dba_nextkey($id);
}

for($i = 0; $i < count($handle_later); $i++)
    dba_delete($handle_later[$i], $id);

?>
  

目次
dba_close ? データベースを閉じる
dba_delete ? キーが指すエントリを削除する
dba_exists ? キーが存在するかどうかを確認する
dba_fetch ? キーが指すデータを取得する
dba_firstkey ? 最初のキーを取得する
dba_insert ? エントリを挿入する
dba_nextkey ? 次のキーを取得する
dba_popen ? データベースを持続的にオープンする
dba_open ? データベースをオープンする
dba_optimize ? データベースを最適化する
dba_replace ? エントリを置換または挿入する
dba_sync ? データベースを同期する