Учебник PHP

         

XLIV. Функции Informix


Введение

Драйвер Informix для Informix (IDS) 7.x, SE 7.x, Universal Server (IUS) 9.x и IDS 2000 реализован в "ifx.ec" и "php3_ifx.h" в директории расширения informix. Поддержка IDS 7.x весьма основательна, с полной поддержкой столбцов BYTE и TEXT. Поддержка IUS 9.x частично завершена: введены новые типы данных, но поддержка SLOB и CLOB всё ещё в стадии разработки.


Требования

Замечания по конфигурации: вам необходима версия ESQL/C для компиляции драйвера Informix для РНР. ESQL/C версии с 7.2x должны работать нормально. ESQL/C является теперь частью Informix Client SDK.

Убедитесь, что переменная "INFORMIXDIR" установлена и что $INFORMIXDIR/bin имеется в вашей переменной окружения PATH, прежде чем запускать скрипт "configure".


Установка

Примечание: скрипт configure будет автоматически определять директории библиотек и include, если вы запустите configure --with_informix=yes. Вы можете переопределить это автоопределение, специфицировав "IFX_LIBDIR", "IFX_LIBS" и "IFX_INCDIR" в окружении. Скрипт configure также попытается определить версию вашего сервера Informix. Он установит переменную условной компиляции


"HAVE_IFX_IUS", если ваша версия Informix >= 9.00.


Конфигурация

Примечание: убедитесь, что переменные окружения Informix INFORMIXDIR и INFORMIXSERVER доступны для PHP ifx-драйвера и что директория INFORMIX bin находится в PATH. Проверьте это, запустив скрипт, содержащий вызов phpinfo(), прежде чем начать тестирование. На выводе phpinfo() эти переменные должны быть перечислены. Это TRUE как для CGI php, так и для Apache mod_php. Вам может понадобиться установить эти переменные окружения в стартовом скрипте вашего Apache.

Совместно используемые библиотеки Informix также должны быть доступны загрузчику (проверьте LD_LINBRARY_PATH или ld.so.conf/ldconfig).

Некоторые замечания об использовании BLOB'ов (столбцы TEXT и BYTE): BLOB'ы нормально адресуются BLOB-идентификаторами. Запросы выборки возвращают "blob id" для каждого столбца BYTE и TEXT. Вы можете получить содержимое с помощью "string_var = ifx_get_blob($blob_id);", если вы выбрали получение BLOB'ов в памяти (с помощью: "ifx_blobinfile(0);"). Если вы предпочитаете получать содержимое BLOB-столбцов в файле, используйте "ifx_blobinfile(1);", а "ifx_get_blob($blob_id);" даст вам filename. Используйте нормальный I/O файлов для получения содержимого blob.

Для запросов insert/update вы обязаны создать эти "blob id'ы" самостоятельно с помощью " ifx_create_blob();". Затем подключите blob id'ы в массив и заместите blob-столбцы знаком вопроса (?) в строке запроса. Для update/insert вы ответственны за установку blob-содержимого с помощью ifx_update_blob().

Поведение BLOB-столбцов может быть изменено переменными конфигурации, что также можно сделать на этапе прогона программы:

переменная конфигурации : ifx.textasvarchar

переменная конфигурации : ifx.byteasvarchar

runtime-функции :

ifx_textasvarchar(0) : использовать blob id'ы для select-запросов со столбцами TEXT

ifx_byteasvarchar(0) : использовать blob id'ы для select-запросов со столбцами BYTE

ifx_textasvarchar(1) : возвращать столбцы TEXT, как если бы они были столбцами VARCHAR, чтобы вам не нужно было использовать blob id'ы дляselect-запросов

ifx_byteasvarchar(1) : возвращать столбцы BYTE, как если бы они были столбцами VARCHAR, чтобы вам не нужно было использовать blob id'ы для select-запросов

переменная конфигурации : ifx.blobinfile

runtime-функция :

ifx_blobinfile_mode(0) : возвращать столбцы BYTE в памяти, blob id позволяет получать содержимое

ifx_blobinfile_mode(1) : возвращать столбцы BYTE в файле, blob id позволяет получать имя файла

Если вы устанавливаете для ifx_text/byteasvarchar значение 1, вы можете использовать столбцы TEXT и BYTE в select-запросах, как нормальные (но всё же long) поля VARCHAR. Поскольку все строки "подсчитаны" в PHP, он остаётся "binary safe". Вы обязаны обработать это корректно. Возвращаемые данные могут содержать всё что угодно, вы отвечаете за содержимое.

Если вы устанавливаете для ifx_blobinfile значение 1, используйте имя файла, возвращаемое ifx_get_blob(..), для получения blob-содержимого. Заметьте, что в этом случае ВЫ ОТВЕЧАЕТЕ ЗА УДАЛЕНИЕ ВРЕМЕННЫХ ФАЙЛОВ, СОЗДАННЫХ INFORMIX, когда извлекаете ряды. Каждый новый извлечённый ряд создаст новый временный файл для каждого столбца BYTE.

Размещение временных файлов может быть настроено переменной окружения "blobdir", по умолчанию "." (текущая директория). Что-то вроде  putenv(blobdir=tmpblob"); облегчит зачистку временных файлов, случайно пропущенных (имена их всех начинаются с "blb").

Автоматическая доводка "char"-данных (SQLCHAR и SQLNCHAR): это можно установить переменной окружения

ifx.charasvarchar : если установлено 1, ведомые пробелы автоматически удаляются, давая вам некоторое подобие "отсечения/chopping".

NULL-значения: переменная конфигурации ifx.nullformat (и функция времени выполнения ifx_nullformat()), если установлена в TRUE, возвратит NULL -столбцы как строку "NULL", если установлена FALSE, они возвратят пустую строку. Это позволяет вам выбирать между NULL -столбцами и пустыми столбцами.


Типы ресурсов


Предопределённые константы

Это расширение не определяет никаких констант.

Содержание
ifx_affected_rows - получает количество рядов, задействованных в запросе
ifx_blobinfile_mode - устанавливает blob-режим по умолчанию для всех select-запросов
ifx_byteasvarchar - устанавливает byte-режим по умолчанию
ifx_close - закрывает соединение Informix
ifx_connect - открывает серверное соединение Informix
ifx_copy_blob - дублирует данный blob-объект
ifx_create_blob - создаёт blob-объект
ifx_create_char - создаёт 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 - удаляет char-объект
ifx_free_result - освобождает ресурсы для запроса
ifx_get_blob - возвращает содержимое blob-объекта
ifx_get_char - возвращает содержимое char-объекта
ifx_getsqlca - получает содержимое sqlca.sqlerrd[0..5] после запроса
ifx_htmltbl_result - форматирует все ряды запроса в виде HTML-таблицы
ifx_nullformat - устанавливает return-значение по умолчанию при извлечении ряда
ifx_num_fields - возвращает количество столбцов в запросе
ifx_num_rows - подсчитывает ряды, уже извлечённые из запроса
ifx_pconnect - открывает постоянное соединение Informix
ifx_prepare - готовит SQL-оператор для выполнения
ifx_query - отправляет Informix query
ifx_textasvarchar - устанавливает текстовый режим по умолчанию
ifx_update_blob - обновляет содержимое blob-объекта
ifx_update_char - обновляет содержимое char-объекта
ifxus_close_slob - удаляет slob-объект
ifxus_create_slob - создаёт slob-объект и открывает его
ifxus_free_slob - удаляет slob-объект
ifxus_open_slob - открывает slob-объект
ifxus_read_slob - читает n байт slob-объекта
ifxus_seek_slob - устанавливает текущую позицию файла или поиска
ifxus_tell_slob - возвращает текущую позицию файла или поиска
ifxus_write_slob - записывает строку в slob-объект
Содержание раздела