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").