そのまんま!

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 システムの PATH が通った場所に DLL ファイルが存在する必要があります。 FAQ の "Windows で PHP のディレクトリを PATH に追加するにはどうすればいいのですか?" で、その方法を説明しています。 DLL ファイルを PHP のフォルダから Windows のシステムディレクトリにコピーしても動作します (システムディレクトリは、デフォルトで PATH に含まれるからです) が、これは推奨しません。 この拡張モジュールを使用するには、以下のファイルが PATH の通った場所にある必要があります。 gds32.dll

InterBase データベースサーバを PHP と同じマシンにインストールしている場合は、 すでに DLL が存在するはずです。その場合は特に何も考える必要はありません。 というのも gds32.dll はすでに PATH の通った場所に存在するからです。

実行時設定

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_* 定数の詳細および定義については 付録H を参照してください。

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

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 年より前の日付に対してこれを使用すると、環境によっては 問題を引き起こす可能性があります。

要求内容やオプションを指定するために、以下の定数を サービス API 関数(ibase_server_info(), ibase_db_info(), ibase_backup(), ibase_restore() および ibase_maintain_db())に渡すことが可能です。 これらのオプションの意味については Firebird/InterBase のマニュアルを 参照ください。

IBASE_BKP_IGNORE_CHECKSUMS

IBASE_BKP_IGNORE_LIMBO

IBASE_BKP_METADATA_ONLY

IBASE_BKP_NO_GARBAGE_COLLECT

IBASE_BKP_OLD_DESCRIPTIONS

IBASE_BKP_NON_TRANSPORTABLE

IBASE_BKP_CONVERT

ibase_backup() へのオプション

IBASE_RES_DEACTIVATE_IDX

IBASE_RES_NO_SHADOW

IBASE_RES_NO_VALIDITY

IBASE_RES_ONE_AT_A_TIME

IBASE_RES_REPLACE

IBASE_RES_CREATE

IBASE_RES_USE_ALL_SPACE

ibase_restore() へのオプション

IBASE_PRP_PAGE_BUFFERS

IBASE_PRP_SWEEP_INTERVAL

IBASE_PRP_SHUTDOWN_DB

IBASE_PRP_DENY_NEW_TRANSACTIONS

IBASE_PRP_DENY_NEW_ATTACHMENTS

IBASE_PRP_RESERVE_SPACE

IBASE_PRP_RES_USE_FULL

IBASE_PRP_RES

IBASE_PRP_WRITE_MODE

IBASE_PRP_WM_ASYNC

IBASE_PRP_WM_SYNC

IBASE_PRP_ACCESS_MODE

IBASE_PRP_AM_READONLY

IBASE_PRP_AM_READWRITE

IBASE_PRP_SET_SQL_DIALECT

IBASE_PRP_ACTIVATE

IBASE_PRP_DB_ONLINE

IBASE_RPR_CHECK_DB

IBASE_RPR_IGNORE_CHECKSUM

IBASE_RPR_KILL_SHADOWS

IBASE_RPR_MEND_DB

IBASE_RPR_VALIDATE_DB

IBASE_RPR_FULL

IBASE_RPR_SWEEP_DB

ibase_maintain_db() へのオプション

IBASE_STS_DATA_PAGES

IBASE_STS_DB_LOG

IBASE_STS_HDR_PAGES

IBASE_STS_IDX_PAGES

IBASE_STS_SYS_RELATIONS

ibase_db_info() へのオプション

IBASE_SVC_SERVER_VERSION

IBASE_SVC_IMPLEMENTATION

IBASE_SVC_GET_ENV

IBASE_SVC_GET_ENV_LOCK

IBASE_SVC_GET_ENV_MSG

IBASE_SVC_USER_DBPATH

IBASE_SVC_SVR_DB_INFO

IBASE_SVC_GET_USERS

ibase_server_info() へのオプション

目次
ibase_add_user --  セキュリティデータベースにユーザを追加する(IB6 以降のみ)
ibase_affected_rows --  直近のクエリで変更された行の数を返す
ibase_backup --  サービスマネージャのバックアップタスクを起動し、すぐに結果を返す
ibase_blob_add --  生成された blob にデータを追加する
ibase_blob_cancel --  blob の生成を取り消す
ibase_blob_close --  blob を閉じる
ibase_blob_create --  データを追加するために blob を生成する
ibase_blob_echo --  ブラウザに blob の内容を出力する
ibase_blob_get --  オープンした blob から len バイト分のデータを取得する
ibase_blob_import --  blob を生成し、ファイルをコピーし、閉じる
ibase_blob_info --  blob の長さと他の便利な情報を返す
ibase_blob_open --  データの一部を取得するために blob をオープンする
ibase_close --  InterBase データベースへの接続を閉じる
ibase_commit_ret -- トランザクションを閉じずにコミットする
ibase_commit -- トランザクションをコミットする
ibase_connect --  InterBase データベースへの接続をオープンする
ibase_db_info --  データベースについての統計情報を要求する
ibase_delete_user --  セキュリティデータベースからユーザを削除する(IB6 以降のみ)
ibase_drop_db --  データベースを削除する
ibase_errcode --  エラーコードを返す
ibase_errmsg --  エラーメッセージを返す
ibase_execute -- 準備されたクエリを実行する
ibase_fetch_assoc --  クエリの結果から、行を連想配列として取得する
ibase_fetch_object -- InterBase データベースからオブジェクトを得る
ibase_fetch_row -- InterBase データベースから 1 行分の結果を取得する
ibase_field_info --  フィールドに関する情報を得る
ibase_free_event_handler --  登録済みのイベントハンドラをキャンセルする
ibase_free_query --  準備されたクエリにより確保されたメモリを解放する
ibase_free_result -- 結果セットを解放する
ibase_gen_id --  指定した名前のジェネレータをひとつ加算し、その新しい値を返す
ibase_maintain_db --  データベースサーバでメンテナンスコマンドを実行する
ibase_modify_user --  セキュリティデータベースのユーザを変更する(IB6 以降のみ)
ibase_name_result --  結果セットに名前を割り当てる
ibase_num_fields --  結果セットにおけるフィールド数を得る
ibase_num_params --  プリペアドクエリのパラメータ数を返す
ibase_param_info --  プリペアドクエリのパラメータに関する情報を返す
ibase_pconnect --  InterBase データベースへの持続的接続をオープンする
ibase_prepare --  後でパラメータのバインド及び実行を行うためにクエリを準備する
ibase_query -- InterBase データベースでクエリを実行する
ibase_restore --  サービスマネージャのリストアタスクを起動し、すぐに結果を返す
ibase_rollback_ret -- トランザクションを閉じずにロールバックする
ibase_rollback -- トランザクションをロールバックする
ibase_server_info --  データベースサーバについての情報を要求する
ibase_service_attach --  サービスマネージャに接続する
ibase_service_detach --  サービスマネージャとの接続を切断する
ibase_set_event_handler --  イベントが発生した際にコールされるコールバック関数を登録する
ibase_timefmt --  クエリから返される timestamp、data、time 型カラムのフォーマットを設定する
ibase_trans -- トランザクションを開始する
ibase_wait_event --  データベースでイベントが発生するのを待つ