Algunas notas sobre el uso de BLOBs (columnas de tipo TEXT y BYTE):
BLOBs son normalmente manipulados por enteros, los cuales representan
identificadores de BLOB.
Las consultas de selección devuelven un "blob id" para columnas de tipo BYTE y TEXT.
Si eliges trabajar con los BLOBs en memoria (con: "ifx_blobinfile(0);") entonces
puedes obtener el contenido con "string_var = ifx_get_blob($blob_id);".
Si prefieres manipularlos en ficheros usa "ifx_blobinfile(1);" y
"ifx_get_blob($blob_id);" devolverá el nombre del archivo. En este caso, utiliza
las funciones habituales de entrada y salida de ficheros para obtener el
contenido de los blob.
Para consultas de inserción y actualización debes crear estos identificadores de blob
con "ifx_create_blob(..);". Entonces pondrás los identificadores de blob en un
array y sustituirás en la cadena de la consulta las columnas de tipo blob por
una interrogación (?).
Para inserciones y actualizaciones eres responsable de definir el contenido
de los blob con ifx_update_blob(...).
La conducta de columnas BLOB puede ser modificada mediante variables de
configuración, las cuales pueden ser definidas en tiempo de ejecución
mediante funciones.
variable de configuración: ifx.textasvarchar
variable de configuración: ifx.byteasvarchar
funciones en tiempo de ejecución:
ifx_textasvarchar(0): usa identificadores de blob para columnas de tipo TEXT
en las consultas de selección
ifx_byteasvarchar(0): usa identificadores de blob para columnas de tipo BYTE
en las consultas de selección
ifx_textasvarchar(1): devuelve columnas de tipo TEXT como si fueran de tipo
VARCHAR, sin tener que usar identificadores de blob en
las consultas de selección
ifx_byteasvarchar(1): devuelve columnas de tipo BYTE como si fueran de tipo
VARCHAR, sin tener que usar identificadores de blob en
las consultas de selección.
variable de configuración: ifx.blobinfile
función en tiempo de ejecución:
ifx_blobinfile_mode(0): devuelve columnas de tipo BYTE en memoria, el
identificador de blob te permite obtener el contenido.
ifx_blobinfile_mode(1): devuelve columnas de tipo BYTE en un fichero, el
identificador te permite saber el nombre de dicho archivo.
Si defines ifx_text/byteasvarchar a 1 entonces puedes usar columnas de tipo
TEXT y BYTE en las consultas de selección como campos de tipo VARCHAR, pero
teniendo en cuenta que tendrán un mayor tamaño que el habitual.
Ya que en PHP todas las cadenas son posibles, esto permite datos
binarios. De esta forma, se pueden manejar correctamente. La información devuelta
puede contener cualquier cosa, tú eres responsable del contenido.
Si defines ifx_blobinfile a 1, utiliza el nombre del archivo devuelto por
ifx_get_blob(..) para acceder a los contenidos del blobs.
En este caso, ERES REPONSABLE DE ELIMINAR EL ARCHIVO TEMPORAL GENERADO POR
INFORMIX cuando accedas a los registros.
Cada nueva fila obtenida creará un nuevo archivo temporal para cada columna
de tipo BYTE.
El directorio donde se guardan los archivos temporales puede ser definido por
la variable de entorno blobdir, por defecto es ".", es decir, el directorio actual.
Así, putenv(blobdir=tmpblob"); definirá un directorio donde se localizarán todos
los ficheros temporales y facilitará su borrado. Todos los nombres de
los archivos comienzan por "blb".