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

PHP マニュアル
前のページ |  | 次のページ

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

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

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

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

dba_open()またはdba_popen() 関数を実行する際、以下のハンドラの１つを引数として指定する必要があ ります。実際に利用可能茄ハンドラのリストは、 phpinfo()を実行した際に表示されます。(PHPの作成 時に以下のハンドラのどれかのサポートを追加するには、PHPのconfigure にスイッチ`--with-XXXX` の指定を追加して下さい。

表 1DBAハンドラのリスト

ハンドラ | 注意
--- | ---
`dbm` | dbm は最も古い(元祖の)Berkeley DB 型データベースです。可能なら ば使用しない方が良いでしょう。DB2およびgdbmに組み込まれている互 換性を保つための関数は、サポートされません。これは、実装されて いるのがソースレベルの互換性のみであり、元のdbmフォーマットを処 理することができないためです。(`--with-dbm`)
`ndbm` | ndbm は、より新型であり、dbmよりも柔軟です。 dbm固有の制約の多くをまだ有しています。(そのため、古い実装です。) (`--with-ndbm`)
`gdbm` | gdbmは、GNUデータベースマネージャ です。(`--with-gdbm`)
`db2` | DB2 は、Sleepycat Software's DB2 です。これは、「スタンドアローンおよびクライアント/サーバー アプリケーションの両方で高性能な組込みデータベースサポートを提供する プログラム用ツールキット」として記述されています。 (`--with-db2`)
`db3` | DB3 は、Sleepycat Softwareの DB3です。(`--with-db3`)
`cdb` | cdbは、固定データベースの作成・読込み用の高速で高信頼性の軽量型 パッケージです。これは、qmailの作者によるものであり、ここにあります。固定であるため、読込 み操作のみがサポートされます。(`--with-cdb`)

例 1DBAの例
    <?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);

    ?>

前のページ | ホーム | 次のページ
ctype_xdigit | 上に戻る | dba_close