Информационные технологииStfw.Ru 🔍

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("&#163;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 - при ошибке.

Учебник по основам PHP   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉