Informix
Взаимодействие с базами данных
🕛 01.11.2006, 13:58
Существующий модуль расширения Informix позволяет работать с БД Informix (IDS) 7.x, SE 7.x, Universal Server (IUS) 9.x и IDS 2000. IDS 7.x поддерживается полностью (включая ноля BYTE и TEXT), ] но для IUS 9.x еще не завершена поддержка типов SLOB и CLOB. Для компиляции необходима ESQL/C (версия 7.2х или выше должна входить в Informix Client SDK) для компиляции драйвера Informix. Также должны быть установлены значения переменных системы INFORMIXDIR и добавлен каталог $INFORMIXDIR/bin в список путей PATH до запуска сценария configure (с ключом -with_informix=yes). Автоопределение каталогов файлов заголовков и библиотек может быть переопределено установкой системных переменных IFX_LIBDIR, IFXJJBS и IFXJNCDIR.
Во время выполнения переменные системы INFORMIXDIR, INFORMIXSERVER и PATH должны быть правильно инициализированы.
Для полей BLOB (TEXT и BYTE) запросом возвращаются их идентификаторы. Их содержимое можно получить в строковой переменной (если установлено ifx_blobinfile(0);) функцией ifx_get_blob($b1ob_id) или сохранить в файле (если установлено ifx_blobinfile(l);) функцией i fx_get_blob($bl ob_i d);.
ifx_connect
Подключение к серверу БД Informix
int ifx_connect ([string database [, string user [, string password]]])
Все аргументы необязательны, и если их не указывать, то используются значения из файла конфигурации: ifx.default_host (если не указано иное, библиотеки Informix используют значение системной переменной INFORMIXSERVER), ifx.default_user, ifx.default_password. Возвращается дескриптор подключения или FALSE - при ошибке. $conn_id = ifx_connect ("mydb@ol_srvl". "imyself". "mypassword"):
Если функция повторно вызывается с теми же аргументами, новое подключение не создается, а возвращается идентификатор имеющегося.
В конце сценария принято закрывать подключение функцией ifx_ close(), но этого можно не делать, поскольку РНР автоматически закрывает все (неустойчивые) подключения при завершении сценария.
См. также: ifx_pconnect() и ifx_close().
ifx_pconnect
Создание устойчивого подключения к серверу БД Informix
int ifx_pconnect ([string database [, string userid [, string password]]])
Возвращается дескриптор подключения или FALSE - при ошибке. ifx_pconnect() действует подобно ifx_connect() с двумя отличиями.
Перед подключением функция пытается проверить, имеется ли уже открытое (устойчивое) подключение с параметрами (БД, пользователь, пароль), аналогичными указанным. Если такое подключение обнаруживается, то возвращается его идентификатор вместо создания нового подключения. При завершении сценария подключение не закрывается, а остается действительным для дальнейшего использования. (Функция ifx_close() не может закрыть подключения, созданные с помощью ifx_pconnect().)
См. также ifx_connect().
ifx_close
Закрытие подключения к Informix
int ifx_close ([int linkjdentifier]) Всегда возвращает TRUE.
Идентификатор закрываемого подключения указывается в аргументе; если сто не указывать, то закрывается последнее открытое данным сценарием подключение.
Фактически использование данной функции не является обязательным, так как РНР автоматически закрывает все незакрытые неустойчивые подключения при завершении сценария.
Устойчивые подключения, созданные функцией ifx_pconnect(), не закрываются.
$corn_id = ifx_connect
("mydb@ol_srv". "itsme". "mypassword").
ifx_close($conn_id):
См. также: ifx_connect() и ifx_pconnect().
ifx_query
Выполнение запроса к БД Informix
int ifx_query (string query [, int linkjdentifier [, int cursorjtype [, mixed blobidarray]]])
Посылает запрос текущей БД, активной для текущего (последнего открытого) подключения или указанного в linkjidentifier. Если подключений не имеется, то косвенно вызывается функция ifx_connect() с параметрами по умолчанию.
Возвращает дескриптор набора возвращенных записей или FALSE -при ошибке.
Для запросов SELECT необязательным аргументом cursorjtype можно указать специальный тип курсора (значение формируется бито-I вой маской из констант IFX_SCROLL, IFXjHOLD).
В зависимости от тина запроса число возвращенных (измененных) записей (приблизительное или фактическое) можно выяснить функцией ifx_affected_rows().
Если в запросе передаются поля BLOB (BYTE или TEXT), то в аргументе (массиве) blobidarray указываются дескрипторы (blob ids), а в запросе вместо их значений ставится знак «?>>.
Если содержимое полей TEXT (или BYTE) допускает, можно использовать функции ifx_textasvarchar(l) и ifx_byteasvarchar(l), что позволяет работать с этими полями (получать их содержимое), как если бы они были обычными (но длинными) нолями VARCHAR, не заботясь о blob дескрипторах. В противном случае придется использовать дополнительные функции.
В ситуации ifx_textasvarchar(0) и ifx_byteasvarchar(0) (по умолчанию) запросы выборки возвращают для полей BLOB их дескрипторы (целые числа). Их содержимое можно получить специальными функциями.
// Пример 1. распечатать всю таблицу
"orders" в виде html ifx_textasvarchar(l).
// use "text mode" for blobs $res_id =
ifx_query("select * from orders". Sconnjid).
if (! Sresjid) { pnntf(
"Can't select orders : lsn<br>ls<br>\n"
. ifx_error()). ifx_errormsg().
dieT } ifx htmltbl_result
($res_id "border=\"l\"");
1Т~х_(тре_г_)
// Пример 2 добавление записей
в таблицу "catalog"
// создать blob поля
$te<tid - ifx_create_blcb(0, 0.
"Text column in memory"):
Sbyteid = ifxj:reate_blob
(l. 0. "Byte column in memory"):
// внести blob id в массив $blobidarray[]
= Stextid. $blobidarray[] = $byteid,
// выполнить запрос
$query = "insert into catalog
(stockjium, manu_code. "
. "cat_descr. cat_pictun;) val ues
(1.' HRO'.7. ?)":
$res_id = ifx_query($query.
$conn_id. Sblobidarray).
if (! $res_id)
{ .. error . . }
i fx_free_result($ resj d):
См. также ifx_connect().
ifx_prepare
Подготовка SQL-запроса для последующего выполнения
int lfx_prepare (string query, int conrMd [, Int cursor_def. mixed blobidarray])
Возвращает дескриптор, используемый в функции ifx_do(). Для запросов SELECT необязательным аргументом cursor_type можно указать тип курсора (значение формируется битовой маской из констант IFXJCROLU IFXJHOLD).
Если в запросе передаются поля BLOB (BYTE или TEXT), то в аргументе (массиве) blobidarray указываются дескрипторы (blob ids), а в запросе вместо их значении ставится знак «?>>.
Если содержимое полей TEXT (или BYTE) допускает, можно использовать функции ifx_textasvarchar(l) и ifx_byteasvarchar(l), что позволяет работать с этими полями (получать их содержимое), как если бы они были обычными (но длинными) полями VARCHAR, не заботясь о blob дескрипторах. В противном случае придется использовать дополнительные функции.
Подготовленные запросы позволяют сперва вычислить число подходящих запросу записей функцией ifx_affected_rows().
См. также ifx_do().
ifx_do
Выполнение подготовленного запроса
int ifx_do (int result_id)
Возвращает TRUE или FALSE - при ошибке.
См. также: ifx_prepare(), ifx_affected_rows().
ifx_error
Получение кода ошибки последней операции Informix string ifx_error(void);
Возвращаемая строка описания ошибки форматируется следующим
образом:
х [SQLSTATE = (две цифры) (три цифры) SQLCODE=cccc],
где х - один из символов, означающих:
пробел - без ошибки;
Е - ошибка;
N - больше нет данных;
W - предупреждение;
? - неопределенное сообщение.
Если х-символ не пробел, то SQLSTATE и SQLCODE описывают детали ошибки (см. документацию БД).
См. также ifx_errormsg().
ifx_errormsg
Получение описа, мя ошибки последней операции
string ifx_errormsg ([int errorcode])
Если в аргументе указать код ошибки, то будет получено ее описание.
printf("£s\ri<br>", ifx_errormsg(-201)); См. также ifx_error().
ifx_affected_rows
Получение числа измененных или возвращенных записей
int ifx_affected_rows (int resulted)
В аргументе указывается дескриптор набора записей, возвращенный функцией ifx_query() или ifx_prepare().
Для запросов типа INSERT, UPDATE и DELETE возвращается число фактически добавленных, измененных, удаленных записей (зна-
чение sqlerrd[2]). Для запросов выборки SELECT это предполагаемое число (sqlerrd[0]), которое не всегда верно.
См. также ifx_num_rows().
ifx_getsqlca
Получение параметров запроса sqlca.sqlerrd[0..5] array ifx_getsq"lca (Int resu"lt_id)
В аргументе указывается дескриптор набора записей, возвращенный функцией ifx_query() или ifx_prepare(). Возвращается ассоциативный массив, содержащий дополнительные результаты выполнения запроса сервером sqlerrd() ... sqlerrdS. Альтернативно ту же операцию можно выполнить запросом "SELECT dbinfo( 'sqlca.sqlerrdx')".
// предполагается, что первое поле таблицы tbl последовательное Sqid = ifx_query("INSERT INTO tbl
VALUES (0. '2nd column', 'another column') ". Sconmd); if (! $qid) { ... error ... } Ssqlca = ifx_getsqlca (Sqid): echo "Последовательное значение добавленной записи: " .
$sqlca["sqlerrdl"].
ifx_fetch_row
Занесение записи в массив
array ifx_fetch_row (int result_id [, mixed position])
Возвращает в ассоциативном массиве (индексами служат имена полей) запись из результата запроса (возвращенного функциями ifx_query() или ifx_prepare()) или FALSE, если записей больше не имеется.
Для полей BLOB возвращаются их цифровые идентификаторы, которые можно использовать в функции ifx_get_blob() (если, конечно, не использовались ifx_textasvarchar(l) или ifx_byteasvarchar(D).
Необязательным аргументом position для SCROLL курсоров можно указать, какую запись следует возвратить: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" или «абсолютный» номер записи.
Последующие вызовы (по умолчанию возвращают следующие записи).
ifx_htmltbl_result
Вывод результатов запроса в таблице HTML
int ifx_htmltbl_result (int resultjid [, string html_table_options])
Возвращает число выведенных записей или FALSE - при ошибке. Во втором аргументе можно указать атрибуты тега <table>.
ifx_ fieldtypes
Получение списка полей набора записей array ifx_fieldtypes (int resu1t_id)
Возвращает ассоциативный массив (имена полей являются индексами, а SQL-типы полей - значениями) или FALSE - при ошибке. В аргументе указывается результат запроса.
ifx_ fieldproperties
Получение списка свойств полей
array ifx_fieldproperties (Int result_id)
Возвращает ассоциативный массив (имена нолей являются индексами, а SQL-свойства полей - значениями) или FALSE - при ошибке. В аргументе указывается результат запроса.
Свойства полей кодируются в виде: "SQLTYPE;length;precision;scale: ISNULLABLE", где SQLTYPE - тип поля Informix (например, "SQLVCHAR"), a ISNULLABLE = "Y" или "N".
Получение числа полей, возвращаемых запросом
int ifx_num_fields (int resultjid)
ifx_num_rows
Получение числа записей, уже полученных из результата запроса
Int ifx_nura_rows (int result_id)
ifx_ free_result
Уничтожение результата запроса
int ifx_free_resu!t (int result_id)
ifx_create_char
Создание char-объекта
int ifx_create_char (string param)
В аргументе указывается содержимое объекта.
ifx_free_char
Уничтожение char-объекта
int ifx_free_char (int bid)
Возвращает TRUE или FALSE - при ошибке.
ifx_update_char
Изменение содержимого char-объекта
int ifx_update_char (int bid, string content) Возвращает TRUE или FALSE - при ошибке.
ifx_get_char
Получение содержимого char-объекта int ifx_get_char (int bid)
ifx_create_blob
Создание blob-объекта
int ifx_create_btob (int type, int mode, string param)
Аргумент type указывает тип: 1 = TEXT, 0 = BYTE;
mode: 0 - что содержимое объекта будет сохраняться в памяти, 1 -в файле;param: если mode = 0, это содержимое объекта, а если mode = 1 - это дескриптор файла данных.
Возвращает идентификатор созданного объекта или FALSE - при ошибке.
ifx_copy_blob
Клонирование blob-объекта
int ifx_copy_blob (int bid)
Возвращает идентификатор созданного объекта или FALSE - при ошибке.
ifx_free_blob
Закрытие blob-объекта
int ifx_free_blob (int bid)
Возвращает TRUE или FALSE - при ошибке.
ifx_get_blob
Получение содержимого blob-объекта
int ifx_get_blob (int bid)
В аргументе указывается идентификатор, полученный запросом.
Если установлено ifx_blobinfile(l), возвращается имя созданного файла, в котором сохранено содержимое поля. Ответственность за удаление этого временного файла возлагается на вас. Размещение его зависит от переменной окружения blobdir (по умолчанию = ".", то есть в текущем каталоге); файлы имеют префикс btb. Для облегчения очистки используйте, например, putenv("bдobdir=tmpblob");.
ifx_update_blob
Изменение содержимого объекта blob
int ifx_update_blob (int bid, string content)
Возвращает TRUE или FALSE - при ошибке.
ifx_ blobinfile_mode
Установка режима получения содержимого объектов blob
Если указывается значение 0, то содержимое будет сохраняться в памяти, а если 1, то в файле. Умолчание также устанавливается в файле конфигурации.
ifx_extasvarchar
Установка режима получения полей TEXT
void ifx_textasvarchar (int mode)
Если указывается значение 0, то для полей TEXT запросом будет возвращаться их идентификатор, а если 1, то непосредственно их содержимое. Значение по умолчанию также устанавливается в файле конфигурации.
ifx_byteasvarchar
Установка режима получения полей BYTE void ifx_byteasvarchar (int mode)
Если указывается значение 0, то для полей BYTE запросом будет возвращаться их идентификатор, а если 1, то непосредственно их содержимое. Умолчание также устанавливается в файле конфигурации.
ifx_nullformat
Установка формата значений NULL void ifx_nullformat (int mode)
Устанавливает, какое значение будет возвращаться запросом для значений NULL. Если указывается значение mode "О", будет возвращаться пустая строка "", а если 1, то значение NULL. Умолчание также устанавливается в файле конфигурации.
ifxus_create_slob
Создание объекта slob и его открытие
int ifxus_create_slob (int mode)
Аргументом можно указать режим открытия (возможны битовые комбинации): 1 = LO_RDONLY, 2 = LOJWRONLY, 4 - LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER. Также возможно использовать именованные константы IFX_LO_RDONLY, IFX_LO_ WRONLY и т. и. Возвращает идентификатор созданного объекта или FALSE - при ошибке.
ifxus_free_slob
Удаление объекта slob
int ifxus_free_slob (int bid) Возвращает TRUE или FALSE - при ошибке.
ifxus_close_slob
Закрытие slob-объекта
int ifxus_c"lose_slob (int bid)
Возвращает TRUE или FALSE - при ошибке.
ifxus_open_slob
Открытие объекта slob
int ifxus_open_slob (long bid, int mode)
Аргументом mode можно указать режим открытия (возможны битовые комбинации): 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND, 8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER. Также возможно использовать именованные константы IFX_LO_RDONLY, IFX_LO_ WRONLY и т. п. Возвращает идентификатор созданного объекта или FALSE - при ошибке.
ifxus_tell_slob
Получение позиции курсора
int ifxus_tell_slob (long bid)
Возвращает текущую позицию (чтения/записи) открытого slob-объекта bid или FALSE - при ошибке.
ifxus_seek_slob
Установка позиции курсора
int ifxus_seek_blob (long bid, int mode, long offset)
Устанавливает позицию (чтения/записи) offset открытого slob-объекта bid в байтах. Возвращает позицию или FALSE - при ошибке.
В аргументе mode указывается, от какого места отчитывается смещение: 0=LO_SEEKlSET (от начала), 1-LO_SEEK_CUR (от текущей позиции), 2=LO_SEEK_END (от конца).
ifxus_read_slob
Чтение данных из объекта slob
string ifxus_read_slob (long bid, long nbytes)
Возвращает прочитанную строку данных размером nbytes байт из slob-объекта bid или FALSE - при ошибке.
ifxus_write_slob
Запись данных в объект slob
int ifxus_write_slob (long bid, string content)
Записывает строку данных content в slob-объект bid. Возвращает число записанных байт пли FALSE - при ошибке.