LXVI. Informix 関数
導入
Informix (IDS) 7.x, SE 7.x, Universal Server (IUS) 9.x ,IDS 2000 用の Informix ドライバは、informix 拡張機能用ディレクトリの "ifx.ec" および "php3_ifx.h" に実装されています。 IDS 7.x のサポートは BYTE および TEXT カラムを完全にサポートしており、 完成度はかなり高いです。 IUS 9.x のサポートは部分的に完成しています。つまり、 新しいデータ型はサポートされていますが、SLOB および CLOB のサポートについてはまだ作業中です。
注意: この拡張モジュールは PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 5.2.1.
要件
設定に関する注意: PHP Informix ドライバをコンパイルするには、ESQL/C が必要です。 7.2x 以降のバージョンに付属する ESQL/C は問題なく使用できます。 現在では、ESQL/C は Informix クライアント SDK に含まれています。
"configure" スクリプトを実行する前に、必ず "INFORMIXDIR" 変数を 設定し、PATH に $INFORMIXDIR/bin を設定しておいてください。
インストール手順
このモジュールで定義した関数を使用可能とするには、configure に
--with_informix[=DIR]
を指定して PHP インタプリタをコンパイルする必要があります。ただし、DIR は Informix のベースインストールディレクトリで、デフォルトはありません。
実行時設定
php.ini の設定により動作が変化します。
注意: Informix 用環境変数 INFORMIXDIR および INFORMIXSERVER が PHP ifx ドライバで利用可能であり、INFORMIX のバイナリがあるディレクトリに パスが通っていることを確認してください。テストを始める前に phpinfo() と書いたスクリプトを実行し、 これを確認してください。 phpinfo() があるスクリプトは、これらの環境変数の 一覧を出力します。これは、CGI 版の PHP および Apache mod_php で 共に行われます。これらの環境変数は Apache のスタートアップスクリプトで 設定する必要があります。
また、Informix 共有ライブラリがローダーで利用可能である必要があります (LD_LINBRARY_PATH または ld.so.conf/ldconfig を確認してください)。
BLOB (TEXT および BYTE カラム)の使用に関する注意: 通常、BLOB は BLOB ID により指定されます。 select クエリは、BYTE および TEXT カラム毎に "blob id" を返します。 ("ifx_blobinfile(0);" により) メモリー上で BLOB を得ることを選択した場合、 "string_var = ifx_get_blob($blob_id);" で内容を得ることができます。 BLOB カラムの内容をファイルに取得したい場合、 "ifx_blobinfile(1);" を使用してください。 "ifx_get_blob($blob_id);" によりファイル名を得ることができます。 BLOB の内容を得る際には、通常のファイル入出力を行ってください。
insert/update クエリーに関しては、 " ifx_create_blob() ;" により自分で "blob id" を作成する必要があります。 その後、blob id を配列に代入し、 クエリー文字列の中の blob カラムを疑問符 (?) で置換します。 updates/inserts の場合、 ifx_update_blob() で blob の内容を設定するのが便利でしょう。
BLOB カラムの動作は、設定用変数で変更することができます。 これらの変数は、実行時にも設定可能です。
設定変数 : ifx.textasvarchar
設定変数 : ifx.byteasvarchar
ランタイム関数 :
ifx_textasvarchar(0) : TEXT カラムを有する select クエリーに blob id を使用する
ifx_byteasvarchar(0) : BYTE カラムを有する select クエリーに blob id を使用する
ifx_textasvarchar(1) : TEXT カラムを VARCHAR カラムとして返します。 このため、select クエリにおいて blob id を使用する必要はありません。
ifx_byteasvarchar(1) : BYTE カラムを VARCHAR カラムとして返します。 このため、select クエリにおいて blob id を使用する必要はありません。
設定変数 : ifx.blobinfile
ランタイム関数 :
ifx_blobinfile_mode(0) : メモリに BYTE カラムを返し、blob id によりその内容を取り出す
ifx_blobinfile_mode(1) : メモリに BYTE カラムを返し、blob id によりそのファイル名を取り出す
ifx_text/byteasvarchar を 1 に設定した場合、 通常の(しかしやや長い) VARCHAR フィールドのように select クエリーで TEXT や BYTE カラムを使用することが可能です。 全ての文字列は、PHP で "数えられる" ので、これにより、 "バイナリ・セーフ"が維持されます。 これを正しく処理するのはあなた次第です。 返されるデータには何でも含むことができますが、その内容について 責任を負うことになります。
ifx_blobinfile を 1 に設定した場合、blob の内容を得るために ifx_get_blob(..) により返されたファイル名を使用してください。 この場合、行を取得する際に「Informix により作成された テンポラリファイルを削除する」責任があります。 取得された新規の行は、BYTE カラム毎に新規のテンポラリファイルを 作成します。
テンポラリファイルの位置は、環境変数 "blobdir" により設定することが できます。デフォルトは、"." (カレントディレクトリ)です。 putenv(blobdir="tmpblob"); のようにすることにより、誤って残って しまったテンポラリファイルを削除することが容易になります (テンポラリファイルの名前は "blb" で始まります)。
自動的に "char" (SQLCHAR および SQLNCHAR) データを取り去る: これは、次の設定変数により設定することが可能です。
ifx.charasvarchar : 最後尾のスペースを何らかの削除処理を行わずに 自動的に取り去る場合に 1 に設定します。
NULL 値: 設定変数 ifx.nullformat (およびランタイム関数 ifx_nullformat() ) を TRUE に設定した場合、文字列 " NULL " として NULL カラムを返します。 FALSE に設定した場合は 空文字列を返します。これにより、 NULL カラムと空のカラムを識別することが 可能となります。
表 1. Informix 設定オプション
| 名前 | デフォルト | 変更の可否 | 変更履歴 |
|---|---|---|---|
| ifx.allow_persistent | "1" | PHP_INI_SYSTEM | |
| ifx.max_persistent | "-1" | PHP_INI_SYSTEM | |
| ifx.max_links | "-1" | PHP_INI_SYSTEM | |
| ifx.default_host | NULL | PHP_INI_SYSTEM | |
| ifx.default_user | NULL | PHP_INI_SYSTEM | |
| ifx.default_password | NULL | PHP_INI_SYSTEM | |
| ifx.blobinfile | "1" | PHP_INI_ALL | |
| ifx.textasvarchar | "0" | PHP_INI_ALL | |
| ifx.byteasvarchar | "0" | PHP_INI_ALL | |
| ifx.charasvarchar | "0" | PHP_INI_ALL | |
| ifx.nullformat | "0" | PHP_INI_ALL |
以下に設定ディレクティブに関する 簡単な説明を示します。
-
ifx.allow_persistentboolean -
持続的な Informix 接続を可能とするかどうか。
-
ifx.max_persistentinteger -
プロセス毎の持続的 Informix 接続の最大数。
-
ifx.max_linksinteger -
持続的接続を含むプロセス毎の Informix 接続の最大数。
-
ifx.default_hoststring -
ifx_connect() または ifx_pconnect() において、ホストが指定されない 場合のデフォルトのホスト。 セーフモード では適用されません。
-
ifx.default_userstring -
ifx_connect() または ifx_pconnect() において、 ユーザが指定されない場合のデフォルトのユーザ。 セーフモード では適用されません。
-
ifx.default_passwordstring -
ifx_connect() または ifx_pconnect() において、 パスワードが指定されない場合のデフォルトのパスワード。 セーフモード では適用されません。
-
ifx.blobinfileboolean -
blob カラムをファイルに返したい場合には TRUE を指定します。 メモリ内に返したい場合には FALSE を指定します。 ifx_blobinfile_mode() により、実行時にこの設定を 上書きすることができます。
-
ifx.textasvarcharboolean -
select 文において TEXT カラムを通常の文字列として返したい場合は TRUE を指定し、blob id パラメータを使用したい場合は FALSE を指定します。 ifx_textasvarchar() により、実行時にこの設定を 上書きすることができます。
-
ifx.byteasvarcharboolean -
select 文において BYTE カラムを通常の文字列として返したい場合は TRUE を指定し、blob id パラメータを使用したい場合は FALSE を指定します。 ifx_byteasvarchar() により、実行時にこの設定を 上書きすることができます。
-
ifx.charasvarcharboolean -
取得時に CHAR カラムから末尾の空白を取り除きたい場合に TRUE を指定してください。
-
ifx.nullformatboolean -
リテラル文字列 " NULL " として NULL カラムを返したい場合に TRUE 、 空の文字列として返したい場合は FALSE を指定してください。 ifx_nullformat() により、実行時にこの設定を 上書きすることができます。
- 目次
- ifx_affected_rows -- クエリで変更された行の数を得る
- ifx_blobinfile_mode -- 全ての select クエリに関するデフォルトの BLOB モードを設定する
- ifx_byteasvarchar -- デフォルトのバイトモードを設定する
- ifx_close -- Informix 接続を閉じる
- ifx_connect -- Informix サーバへの接続をオープンする
- ifx_copy_blob -- 指定した BLOB オブジェクトを二重化する
- ifx_create_blob -- BLOB オブジェクトを作成する
- ifx_create_char -- 文字オブジェクトを作成する
- ifx_do -- 事前に準備された SQL 文を実行する
- ifx_error -- 直近の Informix コールのエラーコードを返す
- ifx_errormsg -- 直近の Informix コールのエラーメッセージを返す
- ifx_fetch_row -- 行を連想配列として取得する
- ifx_fieldproperties -- SQL フィールドプロパティのリスト
- ifx_fieldtypes -- Informix SQL フィールドのリスト
- ifx_free_blob -- BLOB オブジェクトを削除する
- ifx_free_char -- 文字オブジェクトを削除する
- ifx_free_result -- クエリに関するリソースを解放する
- ifx_get_blob -- BLOB オブジェクトの内容を返す
- ifx_get_char -- 文字オブジェクトの内容を返す
- ifx_getsqlca -- クエリ実行後、sqlca.sqlerrd[0..5] の値を得る
- ifx_htmltbl_result -- クエリ結果の全行を HTML テーブルにフォーマットする
- ifx_nullformat -- 取得する行のデフォルトの返り値を設定する
- ifx_num_fields -- クエリのカラム数を返す
- ifx_num_rows -- クエリから既に取得された行の数を数える
- ifx_pconnect -- 持続的 Informix 接続をオープンする
- ifx_prepare -- SQL 文を実行用に準備する
- ifx_query -- Informix クエリを送信する
- ifx_textasvarchar -- デフォルトのテキストモードを設定する
- ifx_update_blob -- BLOB オブジェクトの内容を更新する
- ifx_update_char -- 文字オブジェクトの内容を更新する
- ifxus_close_slob -- SLOB オブジェクトを削除する
- ifxus_create_slob -- SLOB オブジェクトを作成し、オープンする
- ifxus_free_slob -- SLOB オブジェクトを削除する
- ifxus_open_slob -- SLOB オブジェクトをオープンする
- ifxus_read_slob -- SLOB オブジェクトから n バイト読みこむ
- ifxus_seek_slob -- 現在のファイル位置またはシーク位置を返す
- ifxus_tell_slob -- 現在のファイルまたはシーク位置を返す
- ifxus_write_slob -- SLOB オブジェクトに文字列を書きこむ