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: Sat, 19 Apr 2003

XLIII. Informix Funktionen

Einf�hrung

Der Informix-Treiber f�r Informix (IDS) 7.x, SE 7.x, Universal Server (IUS) 9.x und IDS 2000 ist in "ifx.ec" und "php3_ifx.h" im Verzeichnis der Informix Erweiterung implementiert. Die Unterst�tzung f�r IDS 7.x ist mit der vollen Unterst�tzung f�r TEXT- und BYTE-Felder ziemlich vollst�ndig. Die Unterst�tzung von IUS 9.x ist nur teilweise fertig: die neuen Datentypen gibt es zwar, aber die Unterst�tzung von SLOB- und CLOB-Datentypen ist noch in Arbeit.

Anforderungen

Bemerkungen zur Konfiguration: Sie brauchen ESQL/C, um den PHP Informix-Treiber zu kompilieren. ESQL/C Versionen ab 7.2x sollten gen�gen. ESQL/C ist jetzt Teil des Informix Client SDK.

Versichern Sie sich, dass die Variable "INFORMIXDIR" gesetzt ist und dass Sie $INFORMIXDIR/bin in Ihren Pfad eingebunden haben, bevor Sie das "configure" Skript aufrufen.

Installation

Anmerkung: Das Konfigurationsskript findet die Bibliotheken und Include-Verzeichnisse selbst�ndig, wenn Sie configure mit der Option --with_informix=yes aufrufen. Sie k�nnen diese automatische Erkennung �berschreiben, wenn Sie in der Systemumgebung "IFX_LIBDIR", "IFX_LIBS" und "IFX_INCDIR" setzen. Das Konfigurationsskript wird ebenso versuchen, die Version Ihres Informix Servers zu erkennen. Es setzt die Variable "HAVE_IFX_IUS" f�r eine bedingte Kompilation, falls Ihre Version >= 9.00 ist.

Laufzeit Konfiguration

Das Verhalten dieser Funktionen wird von Einstellungen in der php.ini bestimmt.

Anmerkung: Die Umgebungsvariablen INFORMIXDIR und INFORMIXSERVER m�ssen f�r den PHP-Treiber verf�gbar sein und das INFORMIX bin-Verzeichnis muss im Pfad enthalten sein. Pr�fen Sie diese Voraussetzungen mit einem Skript, das einen Aufruf von phpinfo() enth�lt, bevor Sie testen. Die Ausgabe von phpinfo() sollte diese Umgebungsvariablen auflisten. Dies ist sowohl f�r CGI PHP als auch Apache mod_php TRUE. M�glicherweise m�ssen Sie diese Umgebungsvariablen in Ihrem Apache Startskript setzen.

Die Informix shared libraries sollten f�r den Lader ebenfalls verf�gbar sein (�berpr�fen Sie den LD_LIBRARY_PATH oder ld.so.conf/ldconfig).

Einige Anmerkungen zum Gebrauch von BLOBs (TEXT- und BYTE Felder): BLOBs werden normalerweise durch BLOB-Identifikatoren adressiert. Select Abfragen geben eine "blob id" f�r alle TEXT- und BYTE-Felder zur�ck. Sie k�nnen die Inhalte mit "string_var = ifx_get_blob($blob_id);" auslesen, falls Sie angeben, dass Sie die BLOBS in den Speicher schreiben m�chten (mit "ifx_blobinfile(0);"). Wenn Sie die Inhalte von BLOB-Felder lieber in eine Datei ausgeben m�chten, benutzen Sie "ifx_blobinfile(1);" und mit "ifx_get_blob($blob_id);" ermitteln Sie den Dateinamen. Benutzen Sie normale Datei I/O-Routinen, um die Inhalte von BLOBs zu erhalten.

Bei insert/update Abfragen m�ssen Sie diese "blob id's" mit der Funktion "ifx_create_blob();" selber erzeugen. Danach schreiben Sie die blob id's in ein Array und ersetzen die BLOB-Felder durch ein Fragezeichen (?) im Abfragestring. F�r die Inhalte der BLOBs, die mit der Funktion ifx_update_blob() gesetzt werden, sind Sie bei updates/inserts selber verantwortlich.

Das Verhalten einer BLOB-Spalte kann auch zur Laufzeit durch Konfigurationsvariablen ver�ndert werden.

Konfigurationsvariable : ifx.textasvarchar

Konfigurationsvariable : ifx.byteasvarchar

Laufzeitfunktionen :

ifx_textasvarchar(0) : benutzt bei SELECT Abfragen von TEXT-Felder die blob-id

ifx_byteasvarchar(0) : benutzt bei SELECT Abfragen von BYTE-Felder die blob-id

ifx_textasvarchar(1) : gibt TEXT-Felder so zur�ck, als w�ren es VARCHAR Felder, so dass Sie keine blob-id f�r select Abfragen brauchen.

ifx_byteasvarchar(1) : gibt BYTE-Felder so zur�ck, als w�ren es VARCHAR Felder, so dass Sie keine blob-id f�r select Abfragen brauchen.

Konfigurationsvariable : ifx.blobinfile

Laufzeitfunktionen :

ifx_blobinfile_mode(0) : gibt BYTE-Felder in den Speicher zur�ck, mit der blob-id k�nnen Sie auf den Inhalt zugreifen.

ifx_blobinfile_mode(1) : gibt BYTE-Felder in einer Datei zur�ck, mit der blob-id k�nnen Sie den Dateinamen ermitteln.

Wenn Sie ifx_text/byteasvarchar auf 1 setzen, k�nnen Sie TEXT- und BYTE-Felder in select Abfragen genauso benutzen, wie normale (allerdings sehr lange) VARCHAR-Felder. Da alle Zeichenketten in PHP "gez�hlt" werden, bleibt dies "binary safe". Es bleibt Ihnen �berlassen, korrekt damit umzugehen. Die zur�ckgegebenen Daten k�nnen alles m�gliche enthalten, so dass Sie f�r die Inhalte verantwortlich sind.

Wenn Sie ifx_blobinfile auf 1 setzen, benutzen Sie den Dateinamen, der von ifx_get_blob(..) zur�ckgegeben wird, um auf den Inhalt des BLOB zuzugreifen. Beachten Sie, dass Sie in diesem Fall F�R DAS L�SCHEN DER TEMPOR�REN DATEIEN, DIE VON INFORMIX ERSTELLT WERDEN VERANTWORTLLICH SIND, wenn sie ein Tupel auslesen. Jedes neue Tupel, das gelesen wird, erzeugt f�r jedes BYTE-Feld eine neue tempor�re Datei.

Der Speicherort f�r die tempor�ren Dateien kann mit der Umgebungsvariablen "blobdir" beeinflusst werden, die Standardeinstellung ist "." (das aktuelle Verzeichnis). Etwas �hnliches wie : putenv(blobdir=tmpblob"); erleichtert das Bereinigen der tempor�ren Dateien, die versehentlich stehen geblieben sind (ihre Namen beginnen alle mit "blb").

Automatisches Abschneiden von Leerzeichen bei "char" (SQLCHAR und SQLNCHAR) Daten: Dies kann mit einer Konfigurationsvariablen eingestellt werden

ifx.charasvarchar : falls auf 1 gesetzt, werden abschliessende Leerzeichen automatisch abgeschnitten. Dies erspart den Aufruf der chop() Funktion.

NULL-Werte: Wenn die Konfigurationsvariable ifx.nullformat (und die Laufzeitfunktion ifx_nullformat()) auf TRUE gesetzt sind, werden NULL-werte in Spalten als Zeichenkette NULL zur�ckgegeben, wenn die Variable auf FALSE gesetzt ist, werden leere Strings f�r NULLwerte zur�ckgegeben. So k�nnen sie zwischen NULLwerten und leeren Spalten unterscheiden.

Tabelle 1. Informix Konfigurationsoptionen

NameStandardwert�nderbar
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
Weitere Details und Definitionen der PHP_INI_* Konstanten finden sie bei der Funktion ini_set().

Hier folgt eine kurze Beschreibung der Konfigurationseinstellungen.

ifx.allow_persistent boolean

Bestimmt, ob persistente Verbindungen zugelassen sind.

ifx.max_persistent integer

Gibt die maximale Anzahl persistenter Verbindungen pro Prozess an.

ifx.max_links integer

Gibt die maximale Anzahl der Verbindungen zum Informix Server pro Prozess an, einschliesslich der persistenten Verbindungen.

ifx.default_host string

Der Standardhost, zu dem verbunden wird, wenn kein Host in ifx_connect() oder ifx_pconnect() angegeben wurde. Diese Einstellung kann im safe mode nicht verwendet werden.

ifx.default_user string

Der Standardbenutzer, wenn kein Benutzer in ifx_connect() oder ifx_pconnect() angegeben wurde. Diese Einstellung kann im safe mode nicht verwendet werden.

ifx.default_password string

Das Standardpasswort, wenn kein Passwort in ifx_connect() oder ifx_pconnect() angegeben wurde. Diese Einstellung kann im safe mode nicht verwendet werden.

ifx.blobinfile boolean

TRUE, falls blob-Spalten in eine Datei ausgegeben werden sollen, FALSE, falls blob-Spalten in den Speicher ausgegeben werden sollen. Sie k�nnen diese Einstellung mit der Funktion ifx_blobinfile_mode() zur Laufzeit �ndern.

ifx.textasvarchar boolean

TRUE, falls text-Spalten in select Abfragen als normale Strings zur�ckgegeben werden sollen. FALSE, falls Sie blob-id Parameter benutzen wolen. Sie k�nnen diese Einstellung mit der Funktion ifx_textasvarchar() zur Laufzeit �ndern.

ifx.byteasvarchar boolean

TRUE, falls BYTE-Spalten in select Abfragen als normale Strings zur�ckgegeben werden sollen. FALSE, falls Sie blob-id Parameter benutzen wolen. Sie k�nnen diese Einstellung mit der Funktion ifx_textasvarchar() zur Laufzeit �ndern.

ifx.charasvarchar boolean

TRUE, falls Sie abschliesende Leerzeichen von CHAR Spalten beim Auslesen abschneiden wollen.

ifx.nullformat boolean

TRUE, falls der Spaltenwert NULL als Literal "NULL" zur�ckgegeben werden soll. FALSE, falls f�r Nullwerte leere Strigs "" zur�ckgegeben werden sollen. Sie k�nnen diese Einstellung mit der Funktion ifx_nullformat() zur Laufzeit �ndern.

Resource Typen

Vordefinierte Konstanten

Diese Erweiterung definiert keine Konstanten.

Inhaltsverzeichnis
ifx_affected_rows -- Gibt die Anzahl der Datens�tze zur�ck, die von einer Abfrage betroffen sind
ifx_blobinfile_mode -- Setzt den Standardmodus f�r BLOBs bei allen SELECT Abfragen
ifx_byteasvarchar -- Setzt den Standard Byte-Modus
ifx_close -- Schliesst eine Informix Verbindung
ifx_connect -- �ffnet eine Verbindung zu einem Informix Server
ifx_copy_blob -- Dupliziert ein gegebenes BLOB (Binary Large Object)
ifx_create_blob -- Erzeugt ein BLOB (Binary Large Object)
ifx_create_char -- Erzeugt ein Zeichen-Objekt
ifx_do --  F�hrt eine vorbereitete Abfrage aus
ifx_error -- Gibt den Fehlercode des letzten Informix Aufrufs zur�ck
ifx_errormsg -- Gibt die Fehlermeldung des zuletzt aufgetretenen Informix Fehlers zur�ck
ifx_fetch_row -- Holt eine Zeile als aufgez�hltes Array
ifx_fieldproperties -- Gibt eine Liste mit den Feldeigenschaften zur�ck
ifx_fieldtypes -- Gibt eine Liste der Informix SQL Felder zur�ck
ifx_free_blob -- L�scht ein Blob Objekt
ifx_free_char -- L�scht ein CHAR Objekt
ifx_free_result -- Gibt den belegten Speicher einer Ergebnismenge wieder frei
ifx_get_blob -- Gibt den Inhalt eines Large Objects zur�ck
ifx_get_char -- Gibt den Inhalt eines Zeichen-Objekts zur�ck
ifx_getsqlca --  Gibt den Inhalt von sqlca.sqlerrd[0..5] nach einer Abfrage zur�ck
ifx_htmltbl_result --  Gibt alle Zeilen einer Abfrage als HTML-Tabelle formatiert zur�ck
ifx_nullformat --  Setzt den aktuellen R�ckgabewert f�r Nullwerte beim Lesen von Zeilen
ifx_num_fields -- Gibt die Anzahl der Spalten einer Abfrage zur�ck
ifx_num_rows -- Count the rows already fetched from a query
ifx_pconnect -- �ffnet eine persistente Informix Verbindung
ifx_prepare -- Stellt einen SQL Befehl zur sp�teren Ausf�hrung bereit
ifx_query -- Schickt eine Informix Abfrage an den Server
ifx_textasvarchar -- Setzt den Standard-Textmodus
ifx_update_blob -- Aktualisiert den Inhalt eines Blob-Objekts
ifx_update_char -- Aktualisiert den Inhalt eines Char-Objekts
ifxus_close_slob -- L�scht ein Slob-Objekt
ifxus_create_slob -- Erzeugt ein Slob-Objekt und �ffnet es
ifxus_free_slob -- L�scht ein Slob-Objekt
ifxus_open_slob -- �ffnet ein Slob-Objekt
ifxus_read_slob -- Liest nbytes aus einem Slob-Objekt
ifxus_seek_slob -- Setzt die aktuelle Dateizeiger- oder Suchposition
ifxus_tell_slob -- Gibt die aktuelle Dateizeiger- oder Suchposition zur�ck
ifxus_write_slob -- Schreibt einen String in ein Slob-Objekt


User Contributed Notes
Informix Funktionen
add a note
joseph at cheek dot com
10-Apr-2000 11:28

installing with IFS2000 support found required header files in /opt/informix/incl/esql, but the files were actually in /opt/informix/incl/public.  a quick change to the configure file fixed that.
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.

MarkRoedel at letu dot edu
02-Mar-2001 11: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.

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 .

isaac dot hopley at morton-fraser dot NO_SPAM dot com
15-Nov-2001 11: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.

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

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

jeff at domintcom dot com
27-Oct-2002 05: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.)

add a note

<imap_utf8ifx_affected_rows>
 Last updated: Sat, 19 Apr 2003
show source | credits | mirror sites 
Copyright © 2001-2003 The PHP Group
All rights reserved.
This mirror generously provided by: /
Last updated: Wed May 14 01:12:44 2003 CEST