PHP: Informix 関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<imap_utf8ifx_affected_rows>
view the version of this page
Last updated: Tue, 21 Dec 2004

XLVII. 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のサポートについては まだ作業中です。

要件

設定に関する注意: 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 を使用する columns

ifx_byteasvarchar(0) : BYTE カラムを有する select クエリーに blob id を使用する columns

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_hostNULLPHP_INI_SYSTEM
ifx.default_userNULLPHP_INI_SYSTEM
ifx.default_passwordNULLPHP_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
PHP_INI_*定数に関する詳細と定義については、 ini_set()を参照して下さい。

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

ifx.allow_persistent boolean

持続性のあるInformix接続を可能とするかどうか。

ifx.max_persistent integer

プロセス毎の持続性のあるInformix接続の最大数。

ifx.max_links integer

持続的接続を含むプロセス毎のInformix接続の最大数。

ifx.default_host string

ifx_connect() または ifx_pconnect()においてホストが指定されない場 合のデフォルトのホスト。 safe modeでは適用され ません。

ifx.default_user string

ifx_connect() または ifx_pconnect()においてユーザーが指定されない 場合のデフォルトのユーザー。 safe modeでは適用され ません。

ifx.default_password string

ifx_connect() または ifx_pconnect()においてパスワードが指定されな い場合のデフォルトのパスワード。 safe modeでは適用され ません。

ifx.blobinfile boolean

あるファイルにblobカラムを返したい場合にはTRUEを指定します。メ モリ内に返したい場合にはFALSEを指定します。 ifx_blobinfile_mode()により、この設定を実行 時に上書きすることができます。

ifx.textasvarchar boolean

select文においてTEXTカラムを通常の文字列として返したい場合は TRUEを指定し、blob idパラメータを使用したい場合は、FALSEを指 定します。 ifx_textasvarchar()により、この設定を実行 時に上書きすることができます。

ifx.byteasvarchar boolean

select文においてBYTEカラムを通常の文字列として返したい場合は TRUEを指定し、blob idパラメータを使用したい場合は、FALSEを指 定します。 ifx_byteasvarchar()により、この設定を実行 時に上書きすることができます。

ifx.charasvarchar boolean

取得時にCHARカラムから末尾の空白を取り除きたい場合にTRUEを指定 して下さい。

ifx.nullformat boolean

リテラル文字列"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 オブジェクトを2重化する
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 -- S取得する行のデフォルトの返り値を設定する
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 オブジェクトに文字列を書きこむ


add a note add a note User Contributed Notes
Informix 関数
drsound
31-Oct-2004 06:20
I just wrote a mini-HOWTO about adding Informix support to mod_php running on a Gentoo Linux server (x86). I wanted to post it here but it was too long. You can find it on (just in case for some reason they change the thread number, the title is "HOWTO: PHP Informix client support").
jeff at domintcom dot com
27-Oct-2002 06:06
add the following to /etc/profile (right before unset i (adjust to your needs)

export INFORMIXDIR=/opt/informix
export ODBCINI=/usr/local/etc/odbc.ini
export INFORMIXSERVER=m_srv

then add the following to your httpd.conf

PassEnv INFORMIXDIR
PassEnv ODBCINI
PassEnv INFORMIXSERVER

(or you can use SetEnv SetEnv INFORMIXDIR /opt/informix  etc.)
cornecNOSPAM at reach dot NO_SPAM dot com
15-Oct-2002 03:14
I upgraded to csdk-2.70.UC3-1 and got the following error when trying to start apache:

Syntax error on line 205 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/libexec/libphp4.so into server: /opt/informix/lib/esql/libifgen.so: undefined symbol: stat
/usr/local/apache/bin/apachectl start: httpd could not be started

This machine has glibc 2.3.5

The following fixed the problem for me (surely there's a better fix) but i'm not sure how it might affect other programs linked to libifgen

mkdir /tmp/ifx
cd /tmp/ifx
ar x $INFORMIXDIR/lib/esql/libifgen.a
gcc -shared -o libifgen.so *.o
cp libifgen.so $INFORMIXDIR/lib/esql
programacion at afinformatica dot com
27-May-2002 02:38
I have compile php-4.0.6 with informix support (dynamic) and when I try to
start apache, it gives me this error message:

Syntax error on line 246 of /etc/httpd/httpd.conf:
Cannot load /usr/lib/apache/libphp4.so into server: /home/informix7/lib/esql/lib
ifgen.so: undefined symbol: stat
/usr/sbin/apachectl start: httpd could not be started
isaac dot hopley at morton-fraser dot NO_SPAM dot com
15-Nov-2001 12:54
If you are tring to access an Informix Online 5.x server over the
network (ie from a webserver) using PHP, be aware that Online
doesn't support network communications as standard unlike later versions.

You need the Informix product 'I-Star' on your Online server.
This will allow your webserver with the informix client SDK
installed to communicate natively (ESQL).

Thanks go to Mario @ PRS for this info.
old dot wolf at project-w dot com
27-Jul-2001 06:40
An intermittent SQL error -25580 is caused by using the wrong glibc version in Linux.

I have this working correctly in Linux (x86) with Informix Client SDK for 2.70UC-1 for Linux, with glibc 2.1.3.

Originally I had glibc 2.1.1 (Red Hat 6), which gave the intermittent error, but upgrading glibc fixed it.

The Informix Client SDKs can be downloaded from www.informix.com (you need to own an Informix database to log on), and glibc is at .
MarkRoedel at letu dot edu
03-Mar-2001 12:19
There's also a FreeBSD version of the client libraries that'll work with PHP.  It's not available for download from their website, but you can request a copy (cd or electronic delivery) by calling Informix Customer Support at 1-800-274-8184 option 3.

Some customer service reps know more about alternative operating systems than others, so you may have to do a bit of educating before they can locate the product in their database, but it's definitely there.

My e-mail confirmation referred to it as "Orderable Part Number 100-15871-204057-1", although that number may be specific to the electronically-delivered edition.
robernet at music-images dot com
26-Sep-2000 02:29
Verify with phpinfo() that you have informix module compiled in php.
Also verify that env vars INFORMIXDIR, INFORMIXSERVER, LD_LIBRARY_PATH are set, and that PATH have a route to your informix subdir.

<imap_utf8ifx_affected_rows>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page