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

ODBC

Взаимодействие с базами данных
🕛 01.11.2006, 13:54
В дополнение к поддержке обычных драйверов ODBC, данная группа функций позволяет работать с базами данных, поддерживающими так называемый интерфейс Unified ODBC. В число БД, использующих API Unified ODBC, входят: Adabas D (http://www.adabas.com), IBM DB2 (http://www.ibm.com/db2), iODBC (http://www.iodbc.org), Solid (http://www.solidtech.com) и Sybase SQL Anywhere (http://www. sybase.com).

Схемы работы с различными БД практически идентичны и различаются только в отношении внутреннего функционирования серверов БД.

См. также раздел «Инсталляция в системах Unix» относительно конфигурирования поддержки этих БД при компиляции.

Заметьте, что использование драйверов ODBC снижает производительность и не является оправданным, если, конечно, вы не планируете менять БД вашего приложения достаточно часто. Более обоснованно использовать первичные функции РНР интерфейса соответствующей БД.

Но что касается БД с интерфейсом Unified ODBC, то здесь не используются сами ODBC драйверы, просто все они используют единую архитектуру API, аналогичную ODBC.

odbc_connect

Подключение к источнику данных (БД)

int odbc_connect (string dsn. string user, string password [, int cursor J:ype])

Возвращает дескриптор подключения к БД (используемый последующими функциями) или О (FALSE) при ошибке. Одновременно можно открывать несколько подключений. В общем случае для открытия подключения необходимо указывать имя системного источника данных DSN, имя и пароль клиента. В Unix-системах иногда возникает проблема подключений, которая может быть устранена указали-

ем параметров подключения в одной строке аргумента dsn в виде
«DSN=DataSource:UID=UserName;PWD=Password».

В необязательном четвертом аргументе можно указать тип курсора БД, и это часто помогает решить проблемы с некоторыми БД; например, при попытке выполнения хранимых процедур (при вызове которых возникает ошибка типа: "Cannot open a cursor on a stored procedure that has anything other than a single select statement in it"), и в таких случаях может помочь указание типа курсора SQL_CUR_ USE_ODBC. Тип курсора может быть указан одной из следующих констант:

SQL_CUR_USE_IF_NEEDED;
SQL_CUR_USE_ODBC;
SQL_CUR_USE_DRIVER;
SQL_CUR_DEFAULT.
odbc_pconnect

Создание устойчивого подключения

int odbc_pconnect (string dsn, string user, string password [, \ int cursor_type])

Возвращает дескриптор подключения к БД или FALSE - при ошибке.

Перед подключением функция пытается проверить, имеется ли уже открытое (устойчивое) подключение с параметрами (имя источника данных, пользователя и пароль), аналогичными указанным. Если такое подключение обнаруживается, то возвращается его идентификатор вместо создания нового подключения.

При завершении сценария подключение не закрывается, а остается действительным для дальнейшего использования. Но устойчивые подключения не работают, если РНР запускается в режиме CGI.

odbc_close

Закрытие сеанса подключения ODBC

void odbc_close (int connection_id)

Заметьте, при имеющихся незавершенных транзакциях функция не закрывает подключение.

odbc_close_all

Закрытие всех подключений ODBC

void odbc_close_aTI(void);

odbc_cursor

Определение типа курсора для подключения

string odbc_cursor (int result_id)

Возвращает имя курсора, используемого в подключении result_ld.

odbc_do

Синоним odbc_exec

int odbc_do (int conn_id, string query)

odbc_exec

Выполнение запроса SQL

int odbc_exec (int connection_id, string query_string)

Возвращает дескриптор набора записей, возвращенных запросом query_string, или FALSE - при ошибке. Параметр connectionjid должен быть ранее успешно возвращен функцией odbc_connect() или odbc_pconnect().

См. также: odbc_prepare() и odbc_execute().

odbc_prepare

Подготовка запроса

int odbc_prepare (int connection_id, string query_string)[

Функция возвращает дескриптор запроса, который затем исполь зуется в функции odbc_execute() для его исполнения, или FALSE - в случае ошибки.

odbc_execute

Выполнение подготовленного запроса

int odbc_execute (int result_id [, array parameters_array])

Выполняет запрос resu1t_id, подготовленный функцией odbc_prepare(). Возвращает TRUE или FALSE - при ошибке. В массиве parameters_array можно указать параметры запроса, если они требуются.

odbc_autocommit

Переключение режима транзакций autocommit

int odbc_autocommit (int connection_id [, int OnOff])

Если не указывается аргумент OnOff, функция возвращает текущее состояние auto-commit для подключения connection_id. True означает «разрешено», a FALSE - «не разрешено» или произошла ошибка.

Если в значении аргумента OnOff указывается значение TRUE, то последующие запросы исполняются незамедлительно, если FALSE - то они откладываются до вызова функции odbc_commit() (таким образом формируя транзакцию). При этом возвращается TRUE или FALSE - при ошибке.

По умолчанию вес запросы исполняются незамедлительно, и запрещение состояния auto-commit равносильно началу транзакции.

См. также: odbc_commit() и odbc_rollback().

odbc_commit

Завершение транзакции

int odbc_commit (int connectiorMd)

Выполняет все отложенные запросы (транзакцию) для подключения connectiorMd и возвращает TRUE или FALSE - при ошибке.

odbc_rollback

Отмена транзакции

int odbc_rollback (int connection_id)

Отменяет псе отложенные запросы (транзакцию) для подключения connection_id и возвращает TRUE или FALSE - при ошибке.

odbc_num_rows

Получение числа возвращенных записей

int odbc_num_rows (int resulted)

; В аргументе указывается дескриптор результата, возвращенный ODBC ' запросом. При ошибке возвращается -1. Для запросов INSERT, UPDATE и DELETE возвращается число вставленных, измененных, удаленных записей; для запроса SELECT - число возвращенных запросом записей (некоторые драйверы возвращают -1 вне зависимости от того, сколько записей было возвращено).

odbc_num_fields

Определение числа полей в результате

int odbc_num_fields (int result_id)

В аргументе указывается дескриптор результата, возвращенный ODBC запросом (функцией odbc_exec()). Функция возвращает число полей (столбцов), содержащихся в наборе записей, возвращенных запросом, либо -1 в случае ошибки.

Обработка полей LONGVARBINARY определяется odbc_binmode().

odbc_result

Получение данных результата запроса

string odbc_result (int result_id, mixed field)

Возвращает содержимое поля, указанного аргументом field текущей записи. Поле может быть указано номером (начиная с 1) или именем:

$item_3 = odbc_result ($Query_ID. 3);
$item_val = odbc_result ($Query_ID. "id"):

Данные полей типа long или двоичные данные возвращаются согласно установкам функций odbc_binmode() и odbcJongreadlen().

odbc_result_all

Распечатка результата запроса в таблице HTML

int odbc_result_all (int result_id [. string format])

Возвращает число выведенных записей или FALSE - при ошибке. В аргументе result_id указывается дескриптор набора записей, возвращенный функцией odbc_exec(), а в строке format можно указать атрибуты тега <TABLE ... >.

odbc_fetch_row

Установка курсора текущей записи

int odbc_fetch_row (int resu!t_id [, int rowjiumber])

Выбирает запись номер rowjiumber (или по умолчанию следующую) . из набора записей resultjid, возвращенного функциями odbc_do() или odbcjaxec(). Возвращает TRUE или FALSE - при ошибке (например, когда записи с таким номером не существует). Последующие вызовы odbc_result() будут возвращать данные из выбранной записи. Нумерация начинается с 0. Не все драйверы допускают произвольный выбор записи.

$сnn = odbc_conrect
("MyDSN"."root" "passI23"):
$rs = odbcjBxecdcnn. "SELECT * FROM tbll").
echo "Записей. ".
$nr = odbc_num_rows($rs).
echo ".иполей: ".
$nf - odbc_num_fields($rs);
// распечатать в виде [n]
'aaa'. '666'. 'ввв'. for($r=l; $r<=$nr; $r++)
{ // записи echo "\n[$r] ".
odbc_fetch_row($rs.$r).
for($f=l: $f<=$nf: $f++)
// поля echo "'",
odbc result(Srs.$f). "'.": }

odbc_fetch_into

Занесение полученной записи в массив

int odbc_fetch_into (int result id [, int rownumber. array resu"lt_array])

Заносит поля записи номер rownumber из набора записей result_id в элементы массива resu"lt_array. Возвращает число полей набора записей (результата запроса) или FALSE - при ошибке.

$cnn = odbc_connect
( 'MyDSN"."root"."pass!23").
$rs = odbc_exec
($cnn."SELECT * FROM tbll").
for($r=l; $r<=odbc_num_rows
($rs): $r++) { odbc_fetch_into($rs.$r.$arr):
$ar[]=$arr
// занести набор записей в двухмерный массив

odbc_ field_name

Определение имени поля

string odbc_field_name (int result_id, int field_number)

Возвращает имя поля по его номеру field_number в наборе записей result_id. Нумерация начинается с 1. При ошибке возвращает FALSE.

odbc_field_num

Определение порядкового номера поля

int odbc_field_num (int result_id, string field_name)

Возвращает номер поля по его имени field_name в наборе записей result_id. Нумерация начинается с 1. При ошибке возвращает FALSE.

odbc_field_type

Получение типа данных поля

string odbc_field_type (int resulted, int fieldjiumber)

Возвращает SQL-тип поля с номером field_number в наборе записей result_id. Нумерация начинается с 1. При ошибке возвращает FALSE.

odbc_field_len

Получение длины (точности) поля

int odbc_field_len (int resultjid, int fieldjiumber)

См. также: odbc_field_scale().

odbc_field_precision

Синоним odbc_fieldjen()

string odbc_field_precision (int result_id, int field_number)

odbc_field_scale

Определение точности поля

string odbc_field_scale (int result_id, int field_number)

Функция возвращает число сохраняемых десятичных знаков после запятой для полей дробных чисел.

odbc_free_result

Освобождение ресурсов, занятых набором записей

int odbcjreej-esult (Int result_id)

Всегда возвращает TRUE. Поскольку при завершении сценария освобождаются вес выделенные ему ресурсы, использовать данную функцию имеет смысл только в случае крайней экономии памяти, расходуемой сценарием.

Если транзакция была начата, но не завершена (см. odbc_autocommit()), данная функция отменяет ее.

odbc_binmode

Определение обработки двоичных полей

int odbc_binmode (int result_id, int mode)

Функция управляет обработкой полей ODBC SQL типов BINARY, VARBINARY, LONGVARBINARY. Если resultjd равен О, то установки будут применяться к новым наборам записей.

ODBC_BINMODE_PASSTHRU - пропускать двоичные поля;
ODBC_BINMODE_RETURN - возвращать двоичные поля как есть (по умолчанию); ,
ODBC_BINMODE_CONVERT - возвращать двоичные поля, конвертируя.
Пропуск (в нервом случае) означает, что при использовании функции odbc_fetch_into() для полей этого типа будет возвращаться nycтая строка.

В последнем случае конвертация означает, что каждый байт данных будет представлен двумя шестнадцатсричными цифрами, например, двоичный байт 00000001 будет представлен как "01", а 11111111 - как "FF".

Обработка длинных двоичных полей также зависит от параметра, установленного функцией odbcJongreadlen().

Binmode longreadlen Результат
ODBC BINMODE PASSTHRU 0 Пропускать
ODBC BINMODE RETURN 0 Пропускать
ODBC_BINMODE_CONVERT 0 Пропускать
ODBC BINMODE PASSTHRU >0 Пропускать
ODBC BINMODE RETURN >0 Возвращать как есть
ODBC BINMODE CONVERT >0 Конвертировать

odbc_longreadlen

Обработка полей LONG

int odbc_longreadlen (int result_id, Int length)

Функция управляет обработкой полей ODBC SQL типов LONG, LONGVARBINARY. В аргументе length указывается, сколько байтов следует возвращать из полей данных типов. По .умолчанию возвращается 4096 байтов.

См. также odbc_binmode().

odbc_setoption

Настройка параметров ODBC

int odbc_setoption (int id. int function, int option, int parara)

Если в аргументе function указывается значение 1, то тогда настраиваются параметры подключения (в этом случае в аргументе id необходимо указывать дескриптор подключения); если указывается 2, то настраиваются параметры запроса (тогда в id указывается настраиваемый запрос).

Это позволяет устранить проблемы с некоторыми своеобразными драйверами ODBC. Конечно, вы должны понимать, какой эффект будет иметь установка того или иного параметра для конкретного драйвера. Пользуйтесь документацией ODBC и не забывайте, что 1 функциональность различных версий драйверов может различаться.

Так как использование этой функции сильно зависит от специфики ODBC драйвера, использовать ее в публикуемых сценариях РНР не рекомендуется. Имейте также в виду, что некоторые параметры доступны только после открытия подключения или подготовки запроса.

Аргумент option - номер устанавливаемого параметра, а рагат - ее значение.

При ошибке возвращается FALSE; иначе TRUE.

// Номер параметра SQL_AUTOCOMM!T
в SQLSetConnectOptionO: 102
// Значение 1 для
SQL_AUTOCOMMIT - SQL_AUTOCOMMIT_ON.
// Следующая строка имеет тот же эффект, что и
// odbc_autocorrmit($conn. TRUE);
odbc_setoption (Sconn. 1. 102. 1):
// Номер параметра SQL_QUERY_TIMCOUT
в SQLSetStmtOption(): 0
// Следующая строка устанавливает
предел выполнения запроса в 30 сек.
tresult = odbc_prepare ($conn. $sq!):
odbc_setoption (Sresult. 2. 0. 30). odbc_execute
(Sresult):

odbc_tables

Получение списка таблиц источника данных

int odbc_tables (Int connection_id [, string qualifier [,

string owner [, string name [, string table_type>)

Возвращает в наборе записей перечисление имеющихся в источнике данных connection_id таблиц (определенного типа table_type). Возвращаемый набор записей содержит следующие ноля:

TABLE_QUALIFIER;
TABLE_OWNER;
TABLE_NAME - имя таблицы;
TABLE_TYPE - тип таблицы; например, «TABLE», «VIEW»;
REMARKS - примечания; например, «MySQL table».
Возвращаемый набор записей сортируется в порядке: TABLE_TYPE, TABLE_ QUALIFIER, TABLEJJWNER, TABLE_NAME.

Аргументы owner и name могут содержать шаблоны («%» заменяет ноль и более символов, а «_» - один символ).

Чтобы получить перечисление возможных значений аргументов qua- / li-ficr, owner и table type, используется следующая семантика:

Если qualifier = "%", a owner и name - пустые строки, то возвраща- \ ется набор записей, содержащий перечисление возможных квали-фикаторов источника данных. (Все поля, за исключением TABLE_ QUALIFIER содержат пустые значения NULL.) Обычно это каталоги (БД), но не все БД используют их.
Если owner = "%", a qualifier и name - пустые строки, то возвращается набор записей, содержащий перечисление владельцев источника данных. (Все поля, за исключением TABLE_OWNER, содержат пустые значения NULL.)
Если tablejtype = "%", a qualifier, owner и name - пустые строки, то возвращается набор записей, содержащий перечисление возможных типов таблиц источника данных. (Все поля, за исключением TABLE_TYPE, содержат пустые значения NULL.)
Если table_type не пустая строка, то она должна содержать перечисление через запятую типов запрашиваемых таблиц, (например, в виде: «'TABLE1.'VIEW'» или «TABLE, VIEW»).

$rs = odbc_tables($cnn. "".""."%". 'TABLF" ):
// все имеющиеся таблицы

См. также odbc_tableprivileges().

odbc_tableprivileges

Получение списка привилегий таблиц

int odbc_tableprivileges (int connect1on_id [, string qualifier [, string owner [, string name]]])

Возвращает список таблиц и присвоенных им привилегий в наборе записей или FALSE при ошибке. Возвращаемый набор записей сортируется в порядке: TA8LEJUALIFIER, TA8LE_OWNER, TABLEJAME и содержит следующие поля:

TABLE_QUALIFIER;
TABLE_OWNER;
TABLEJJAME;
GRANTOR;
GRANTEE;
PRIVILEGE;
IS_GRANTABLE.
Аргументы owner и name могут содержать шаблоны («%» заменяет .. ноль и более символов, а «_» - один символ).

См. описание odbc tables().

odbc_statistics

Получение описания таблицы

int odbc_statisties (int connection_id, string qualifier, string owner, string tablejiame, int unique, int accuracy)

Возвращает список таблиц и их индексов в наборе записей или FALSE - при ошибке. Возвращаемый набор записей сортируется в порядке: NONJJNIQUE, TYPE, INDEX_QUALIFIER, INDEXJAME и SEQ_IN_INDEX и содержит следующие ноля:

TABLE_QUALIFIER;
TABLE JMIER;
TABLE NAME;
NONJJNIQUE;
INDEX_QUALIFIER;
INDEX_NAME;
TYPE;
SEQ_IN_INDEX;
COLLATION;
CARDINALITY;
PAGES;
FILTER_CONDITION.
odbc_columns

Перечисление полей заданной таблицы

int odbc_columns (int connection_id [, string qualifier [, string owner [, string tablejiame [, string column_name>)

Возвращает список полей таблицы table_name в наборе записей или FALSE - при ошибке. Возвращаемый набор записей сортируется в порядке: TABLE_QUALIFIER, TABLE_OWNER и TABLEJAME и содержит следующие поля:

TABLE_QUALIFIER;
TABLE_OWNER;
TABLE_NAME;
COLUMN_NAME;
DATA_TYPE;
TYPE_NAME;
PRECISION;
LENGTH;
SCALE;
RADIX;
NULLABLE;
REMARKS.
Аргументы owner, tablejname и columnjiame могут содержать шаблоны («%» заменяет ноль и более символов, а «_» - один символ).

См. также odbc_columnprivileges().

odbc_columnprivileges

Перечисление полей заданной таблицы с их привилегиями

int odbc_co1umnprivileges (int connection_id [, string qualifier [, string owner [, string table_name [, string column_name>)

Возвращает список полей таблицы table_name в наборе записей или FALSE - при ошибке. Возвращаемый набор записей сортируется в порядке: TABLE_QUALIFIER, TABLE_OWNER и TABLE_NAME и содержит следующие поля:

TABLE_QUALIFIER;
TABLEJMER;
TABLE_NAME;
GRANTOR;
GRANTEE;
PRIVILEGE;
IS_GRANTABLE.
Аргумент column_name может содержать шаблоны («%» заменяет ноль и более символов, а <<_» - один символ).

odbc_gettypeinfo

Определение типов поддерживаемых данных

int odbc_gettypeinfo (Int connectien_id [, int data_type])

Возвращает набор записей, содержащий перечисление поддерживаемых БД типов данных; если необходимо выяснить, поддерживается ли конкретный тип данных, его необходимо указать в аргументе data_type. При ошибке возвращается FALSE.

А В наборе записей возвращаются следующие поля:

TYPEJIAME;
OATA_TYPE;
PRECISION;
LITERAL_PREFIX;
LITERAL_SUFFIX;
CREATE_PARAMS;
NULLABLE;
CASE_SENSITIVE;
SEARCHABLE;
UNSIGNED_AnRIBUTE;
MONEY;
AUTO_INCREMENT;
LOCAL_TYPE_NAME;
MINIMUM_SCALE;
MAXIMUM_SCALE.
Записи сортируются по полям DATA_TYPE и TYPE_NAME.

odbc_primarykeys

Подбор поля, способного быть первичным ключом таблицы

int odbc_primarykeys (int connection_id, string qualifier, string owner, string table)

Возвращает набор записей, содержащий список полей, которые могут претендовать на роль первичного ключа таблицы table. При ошибке возвращается FALSE.

В наборе записей возвращаются следующие поля:

TABLE_QUALIFIER;
TABLE_OWNER;
TABLEJAME;
COLUMN_NAME;
KEYJEQ;
PK_NAME.
odbc_foreignkeys

Получение списка внешних ключей

int odbc_foreignkeys (int connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)

Если pk_table содержит имя таблицы, то функция возвращает набор записей, содержащий первичный ключ этой таблицы и все внешние ключи (foreign keys), которые на него ссылаются.

Если fk_tab!e содержит имя таблицы, то функция возвратцает набор записей, содержащий все внешние ключи этой таблицы и корреспондирующие первичные ключи в других таблицах.

Если и pk_table и fk_table содержат имена таблиц, функция возвращает внешний ключ таблицы fk_table, который указывает на первичный ключ в таблице pk_table.

В возвращаемом наборе записей содержатся следующие поля:

PKTABLE_QUALIFIER;
PKTABLE_OWNER;
PKTABLEJJAME;
PKCOLUMN_NAME;
FKTABLE_QUALIFIER;
FKTABLE_OWNER;
FKTABLE_NAME;
FKCOLUMN_NAME;
KEYJEQ;
UPDATE_RULE;
DELETE_RULE;
FK_NAME; . PKJWME.
odbc_procedures

Получение списка хранимых процедур

int odbc_procedures (int connection_id [, string qualifier [, string owner [, string name]]])

Возвращает список хранимых процедур name в наборе записей, содержащем следующие поля:

PROCEDURE_QUALIFIER;
PROCEDUREJMER;
PROCEDURE_NAME;
NUMJNPUTJ» ARAMS;
NUM_OUTPUT_PARAMS;
- NUM_RESULT_SETS;
REMARKS;
PROCEDURE_TYPE.
Аргументы owner и name могут содержать шаблоны («%» заменяет ноль и более символов, а «_» - один символ).

odbc_procedurecolumns

Получение списка параметров хранимых процедур

int odbc_procedurecolumns (int connection_id [, string qualifier [, string owner [, string proc [, string column>)

Возвращает список хранимых процедур (с их входными и выходными параметрами и описанием возвращаемых ими полей) в наборе записей, содержащем следующие поля:

PROCEDURE_QUALIFIER;
PROCEDURE J1WNER;
PROCEDUREJAME;
COLUMN_NAME;
COLUMN_TYPE;
DATATYPE;
TYPEJAME;
PRECISION;
LENGTH;
SCALE;
RADIX;
NULLABLt;
REMARKS.
Записи сортируются по полям PROCEDURE_QUALIFIER, PROCEDURE_OWNER, PROCEDURE_NAME и COLUMNJYPE.

Аргументы owner, ргос и column могут содержать шаблоны («%» заменяет ноль и более символов, а «_» - один символ).

odbc_specialcolumns

Получение списка специальных полей

int odbc_specialcolumns (int connectionjd, int type. string qualifier, string owner, string table, int scope, int nullable)

Если в аргументе type указано значение SQL_BEST_ROWID, возвращаются поля, уникально идентифицирующие каждую запись в таблице.

Если в аргументе type указано значение SQLJ!OWVER, возвращаются оптимальные ноля, извлекая значения которых, можно уникально идентифицировать любую запись указанной таблицы (вне зависимости от изменений, производимых в таблице).

Поля возвращаются в наборе записей (сортируемом по полю SCOPE), содержащем следующие ноля:

SCOPE;
COLUMN_NAME;
DATAJYPE;
TYPE_NAME;
PRECISION;
LENGTH;
SCALE;
PSEUDO_COLUMN.

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

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