17.5. ODBC
Открытый интерфейс доступа к базам данных (Open Database Connectivity, ODBC) стал промышленным стандартом обмена данными с базами данных. Модель здесь очень проста. Для использования ODBC API было разработано клиентское программное обеспечение. Изготовители разрабатывают драйверы, работающие с этим API на стороне клиента и работающие непосредственно с базой данных на стороне сервера. Это позволяет разработчикам программных приложений создавать приложения, которые могут работать с различными базами данных путем простой замены драйвера, который является внешним файлом.
ODBC использует SQL в качестве языка общения с любой базой данных, даже когда база данных не является реляционной. Microsoft предлагает драйверы, которые позволяют создавать запросы для работы с текстовыми файлами и рабочими книгами Excel. Первоначально об ODBC лучше всего узнать на узле, предназначенном для разработчиков Microsoft, - <http://msdn.microsoft.com/>. 
Microsoft определенное время предлагала бесплатные ODBC-драйверы, но только для своих операционных систем. ODBC-драйверы для ОС Unix достать труднее. Многие из разработчиков баз данных также предлагают свои драйверы, кроме того, на рынке есть еще и третьи игроки: такие компании, как Intersolv, продают оптимизированные драйверы как для Windows, так и для Unix.
Многие базы данных позволяют осуществлять доступ к ним из PHP как через "родные" драйверы, так и через ODBC-драйверы. Есть также множество баз данных, доступ к которым осуществляется из PHP только через ODBC, например СУБД Solid и Empress.
В создании расширения, работающего с ODBC, принимали участие разработчики Стиг Баккен (Stig Bakken), Андреас Караджаннис (Andreas Karajannis) и Франк Кроман (Frank Kromann).
boolean odbc_autocommit(resource connection, boolean on)
Функция odbc_autocommit (листинг 17.21) задает автоматическое выполнение команд ODBC. По умолчанию она активна. Аргументом connection является целое число, возвращаемое функцией odbc_connect или odbc_pconnect. Эта функция используется в зависимости от ситуации, так как не все ODBC-драйверы поддерживают работу операторов commit и rollback.

I Листинг 17.21. Функция odbc_autocommit_
<?php
// подключиться к базе данных
$Link = odbc_connect("inventory", "guest", "guest"); //отключить режим auto-commit odbc_autocommit($Link, FALSE);
?>

boolean odbc_binmode(resource result, integer mode)
Функция odbc_binmode (листинг 17.22) задает способ возврата данных двоичными столбцами для результирующего набора. Когда драйвер возвращает двоичные данные, каждый байт представляется шестнадцатеричными кодами. По умолчанию PHP преобразует эти коды в двоичные данные. Если необходимо использовать функцию odbc_longreadlen для задания максимальной длины значений данных типа long, отличного от нуля, можно задать один из режимов, приведенных в табл. 17.10. Если максимальная длина чтения равна нулю, данные в любом случае преобразуются в двоичные.
Базы данных
Листинг 17.22. Функция odbc_binmode

<?php
//получить из базы данных GIF-файл и переслать его в браузер // подключиться к базе данных
$Connection = odbc_connect("inventory", "admin", "secret"); // выполнить запрос
$Query = "SELECT Data " . "FROM Picture " .
"WHERE ID=2 "; $Result = odbc_do($Connection, $Query);
//установить режим binmode для пересылки двоичных данных
odbc_binmode($Result, ODBC_BINMODE_PASSTHRU);
//установить режим longreadlen // для ответа браузеру odbc_longreadlen($Result, 0);
// принять первую строку и проигнорировать остальные odbc_fetch_row($Result);
//отправить заголовок в браузер так, чтобы он "знал", что имеет формат GIF
header("Content-type: image/gif"); // получить картинку odbc_result($Result, 1);
?>

odbc_close(resource connection)
Функция odbc_close (листинг 17.23) предназначена для закрытия соединения с базой данных. Если имеют место открытые транзакции к соединению, то возвращается ошибка и это соединение не закрывается.
Базы данных