XLII. Firebird/InterBase 関数

導入

Firebird/InterBase は ANSI SQL-92 の多くの機能をサポートする リレーショナルデータベースで、Linux・Windows その他多くの Unix プラットフォーム上で動作します。Firebird/InterBase は 優れた同時実行性・パフォーマンス、そしてストアドプロシージャや トリガでの強力な言語サポートを提供します。1981 年以降、このデータベースは さまざまな名前の製品として使用されています。

InterBase はこの RDBMS のクローズドソース版の名前で、Borland/Inprise によって開発されました。InterBase についての詳細な情報は http://www.borland.com/interbase/ にあります。

Firebird は C・C++プログラムやテクニカルアドバイザやサポーターたちによる 商業的に独立したプロジェクトです。Inprise Corp(現在は Borland Software Corp という名で知られています)が 2000 年 7 月 25 日に InterBase Public License v.1.0 の下で公開したソースコードをもとにして、 マルチプラットフォームなリレーショナルデータベースの開発と機能拡張を 行っています。Firebird についての詳細な情報は http://www.firebirdsql.org/ にあります。

注意: この拡張モジュールは、InterBase のバージョン 5 以降とすべてのバージョンの Firebird をサポートします。InterBase バージョン 5.x のサポートは、PHP 5 で削除されました。

このデータベースは、シングルクオート(')文字をエスケープに使用します。 この動作は Sybase データベースに似ており、以下のディレクティブを php.ini に追加してください。

magic_quotes_sybase = On

インストール手順

PHP で InterBase サポートを有効にするには、 --with-interbase[=DIR] を指定して 設定を行います。ただし、DIR は InterBase のベースインストールディレクトリで、 デフォルトは /usr/interbase です。

Win32 ユーザへの注意: このモジュールをWindows環境で有効にするには、 gds32.dllをPHP/Win32バイナリパッケージのDLLフォ ルダから使用するWindowsマシンのSYSTEM32フォルダ(例: C:\WINNT\SYSTEM32 または C:\WINDOWS\SYSTEM32) にコピーする必要があります。 InterBase データベースサーバを PHP を実行しているのと同じマシンに インストールしている場合、この DLL はすでにあるはずです。この場合、 DLL フォルダから gds32.dll をコピーする必要は ありません。

実行時設定

php.ini の設定により動作が変化します。

表 1. InterBase設定オプション

名前デフォルト変更の可否変更履歴
ibase.allow_persistent"1"PHP_INI_SYSTEM 
ibase.max_persistent"-1"PHP_INI_SYSTEM 
ibase.max_links"-1"PHP_INI_SYSTEM 
ibase.default_dbNULLPHP_INI_SYSTEMPHP 5.0.0 以降で使用可能です。
ibase.default_userNULLPHP_INI_ALL 
ibase.default_passwordNULLPHP_INI_ALL 
ibase.default_charsetNULLPHP_INI_ALLPHP 5.0.0 以降で使用可能です。
ibase.timestampformat"%Y-%m-%d %H:%M:%S"PHP_INI_ALL 
ibase.dateformat"%Y-%m-%d"PHP_INI_ALL 
ibase.timeformat"%H:%M:%S"PHP_INI_ALL 
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

ibase.allow_persistent boolean

Firebird/InterBase 持続的な接続 を許可するかどうか。

ibase.max_persistent integer

プロセスごとの、Firebird/InterBase の持続的接続の最大数。 この数を超えた場合、ibase_pconnect() による新しい接続は 持続的ではない接続になります。

ibase.max_links integer

プロセスごとの Firebird/InterBase の接続の最大数。持続的な接続の数も 含みます。

ibase.default_db string

データベース名を指定せずに ibase_[p]connect() がコールされた場合に 接続するデフォルトのデータベース。この値が設定されており、かつ SQL セーフモードが有効な場合、このデータベース以外への接続は一切許可されません。

ibase.default_user string

ユーザ名を指定せずにデータベースに接続した際に使用されるユーザ名。

ibase.default_password string

パスワードを指定せずにデータベースに接続した際に使用されるパスワード。

ibase.default_charset string

文字セットを指定せずにデータベースに接続した際に使用される文字セット。

ibase.timestampformat string

ibase.dateformat string

ibase.timeformat string

これらのディレクティブは日付や時間のフォーマットを指定します。 結果セットの中の日付や時間のデータ、そしてパラメータとしてバインドする 日付や時間のデータに適用されます。

定義済み定数

以下の定数が定義されています。 この関数の拡張モジュールが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合のみ使用可能です。

トランザクションの挙動を設定するため、以下の定数を ibase_trans() に渡すことが可能です。

表 2. Firebird/InterBase トランザクションフラグ

定数説明
IBASE_DEFAULT デフォルトのトランザクション設定が使用されます。デフォルト設定は クライアントライブラリによって決定され、たいていの場合は IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT です。
IBASE_READ読み込み専用のトランザクションを開始します。
IBASE_WRITE読み書き可能なトランザクションを開始します。
IBASE_CONSISTENCY 分離レベルを 'consistency' にしてトランザクションを開始します。 他のトランザクションによって変更中のテーブルを読み込むことは できません。
IBASE_CONCURRENCY 分離レベルを 'concurrency' (あるいは 'snapshot') にして トランザクションを開始します。すべてのテーブルへのアクセスが 可能ですが、トランザクションの開始以降に別のトランザクションに よってコミットされた内容を見ることはできません。
IBASE_COMMITTED 分離レベルを 'read committed' にしてトランザクションを開始します。 このフラグは IBASE_REC_VERSION あるいは IBASE_REC_NO_VERSION とともに使用する必要があります。 トランザクションの開始以降にコミットされた内容についてもアクセス可能と なります。IBASE_REC_NO_VERSION が指定された場合、 最新バージョンのデータのみが読み込み可能となります。 IBASE_REC_VERSION が指定された場合、他の トランザクションで処理が完了していない変更についても読み込むことが できます。
IBASE_WAIT 衝突が発生した場合に、トランザクションが処理を再試行することを示します。
IBASE_NOWAIT 衝突が発生した場合に、トランザクションがその場で処理を中断して 処理が失敗することを示します。

データの取得方法を指定するために、以下の定数を ibase_fetch_row()ibase_fetch_assoc() あるいは ibase_fetch_object() に渡すことが可能です。

表 3. Firebird/InterBase フェッチフラグ

定数説明
IBASE_FETCH_BLOBS 過去との互換性を保持するため、IBASE_TEXT としても使用可能です。BLOB データを読み込む際に、BLOB ID ではなく 直接データそのものを読み込みます。
IBASE_FETCH_ARRAYS 配列をインラインで読み込みます。指定しなかった場合は、配列の ID を返します。配列 ID は INSERT 操作への引数としてのみ使用可能で、 配列 ID を処理できる関数は現在存在しません。
IBASE_UNIXTIME 日付や時刻のフィールド値を、文字列ではなく UNIX タイムスタンプ (1-Jan-1970 0:00 UTC からの経過秒数)で返します。 1970 年より前の日付に対してこれを使用すると、