Меню Рубрики

Установка php расширения odbc

Функции ODBC и DB2 (PDO_ODBC)

Введение

PDO_ODBC — драйвер, реализующий интерфейс PHP Data Objects (PDO) для доступа к базам данных через драйвер ODBC или через библиотеку IBM DB2 Call Level Interface (DB2 CLI). В текущий момент PDO_ODBC поддерживает различные «оттенки» драйверов баз данных: ibm-db2

Поддержка доступа к серверам IBM DB2 Universal Database, Cloudscape и Apache Derby через свободный клиент DB2 express-C.

Поддерживает доступ к базам данных через менеджер драйверов unixODBC и собственные ODBC драйверы баз данных.

Предоставляет опцию компиляции менеджеров драйверов ODBC, которые не поддерживаются PDO_ODBC напрямую.

В Windows php_pdo_odbc.dll должно быть разрешено как расширение в php.ini . Оно собирается с участием Windows ODBC Driver Manager, так что PHP сможет соединяться с любой базой данных определенной как System DSN и является рекомендованным для использования для соединения с базами данных Microsoft SQL Server.

Установка

Начиная с PHP 5.1, расширение PDO_ODBC включено в исходный код PHP. Вы можете скомпилировать это расширение как статическое или разделяемое, используя следующий синтаксис configure. ibm_db2

Если вы не укажете директорию установки библиотек и заголовочных файлов DB2, configure будет искать их в /home/db2inst1/sqllib .

Настройка во время выполнения

Поведение этих функций зависит от установок в php.ini .

Конфигурационные опции PDO_ODBC

Имя По умолчанию Место изменения Список изменений
pdo_odbc.connection_pooling «strict» PHP_INI_ALL Доступно с PHP 5.1.0.
pdo_odbc.db2_instance_name NULL PHP_INI_SYSTEM Доступно с PHP 5.1.1. Эта возможность устарела и будет обязательно удалена в будущем.

Для подробного описания констант PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.

Краткое разъяснение конфигурационных директив.

Нужно ли объединять соединения ODBC. Может быть «strict», «relaxed» или «off» (аналогично «»). Параметр определяет как строго менеджер соединений должен сравнивать параметры соединений для выбора, создавать новое соединение или возвращать уже существующее. По умолчанию рекомендуется использовать strict , что означает, что сохраненное соединение будет возвращаться только, если все параметры точно совпадают. relaxed приведет к тому, что закешированное соединение будет возвращено, если параметры схожи. Это приведет к более активному использованию кеша, но может привести к утечке информации о соединении (к примеру) между виртуальными хостами.

Эту настройку можно изменить только в php.ini и воздействует на все процессы; все модули, загшруженные в процексс и использующие те же библиотеки ODBC будут зависить от этой настройки, включая Унифицированное расширение ODBC.

Значение relaxed не должно использоваться на общем хостинге в целях безопасности.

Если у вас нет очень серьезного повода использовать значение, отличное от strict — не меняйте его.

Если вы скомпилировали PDO_ODBC с использованием db2, эта опция установит значение переменной окружения DB2INSTANCE в системах Linux и UNIX, равным выбранному имени экземпляра DB2. Это позволяет PDO_ODBC опредилить местоположение библиотек DB2 и произвести соединение с каталогом базы данных DB2.

источник

Как использовать ODBC с PHP

Руководство для начинающих по универсальному подключению к базам данных с помощью PHP

PHP ― один из наиболее часто используемых языков программирования для разработки динамических Web-сайтов. Это мощный и эффективный инструмент. К тому же он достаточно прост и очень хорош для начинающих ввиду своей гибкости.

PHP ― хороший язык и сам по себе (особенно в сочетании с XHTML). Однако для большинства приложений необходим удобный метод хранения данных, как правило, с помощью базы данных, например MySQL или PostgreSQL. Для подключения PHP к системам хранения данных требуется коннектор, позволяющий выполнять такие функции, как mysql_query () и pg_query () . В большинстве случаев этого достаточно, но иногда нужно, чтобы данные хранились в чем-то вроде электронной таблицы, с которой легко работать индивидуально. В таких ситуациях для связи с данными требуется другой коннектор.

А что делать, если нужно, чтобы команды SQL работали не с системой управления базами данных, а с любым специально настроенным хранилищем данных? Для этого и создан Open Database Connectivity (ODBC), и при правильной установке коннекторов можно получить доступ даже к Microsoft® Excel®, CSV и другим файлам данных. ODBC представляет собой коннектор, который делает PHP-разработку «не зависящей от коннектора базы данных». Он применяет такие функции, как odbc_query () , к таким базам данных, как MySQL, PostgreSQL, SQLite, Microsoft SQL Server®, IBM® DB2®, Sybase, OpenLink Virtuoso, FileMaker и Microsoft® Office®. Его можно применять и к CSV-файлам и таблицам Excel — в зависимости от настройки драйвера ODBC.

ODBC: что это такое?

ODBC – это система программных драйверов, использующихся для связи языков программирования с хранилищами данных. Это свободно распространяемая система с открытым исходным кодом, которая создана в 1992 году в попытке стандартизировать способы связи, такие как функции и настройки, между языками программирования и языками запросов к базам данных (стандартизация SQL).

ODBC работает как двойной интерфейс или коннектор: во-первых, как интерфейс от системы языка программирования к ODBC-системе, и во-вторых, как интерфейс от ODBC-системы к системе хранения данных. Таким образом, для ODBC требуется драйвер «язык программирования – ODBC» (например, библиотека PHP-ODBC ) и драйвер «ODBC – система хранения данных» (например, библиотека MySQL-ODBC). Это в дополнение к самой ODBC-системе, которая управляет конфигурациями источников данных и позволяет менять источники данных и языки программирования.

Как сопрягаются PHP и SQL?

PHP — это язык программирования, как правило, используемый в качестве серверного языка для динамических Web-сайтов. Это гибкий, динамичный и слабо типизированный язык. Он должен показаться знакомым многим разработчикам, поскольку создавался под влиянием языка программирования С. PHP, свободно распространяемый и открытый язык программирования, который появился в 1995 году, можно использовать с базами данных через коннектор для генерации XHTML и HTML в Web-браузере.

SQL представляет собой кросс-платформенный язык для обращения к хранилищам данных. Он используется главным образом для работы с реляционными базами данных, но имеет процедурные, объектно-ориентированные и объектно-реляционные расширения. Современные реализации SQL можно найти в MySQL, PostgreSQL, SQLite, DB2 (как коммерческих, так и Express-C редакциях), Microsoft SQL Server, OpenLink Virtuoso, FileMaker и Microsoft Access — все они могут подключаться для использования с языками программирования типа PHP через систему связи (ODBC).

Настройка ODBC

Давайте посмотрим, как типичную среду Linux-Apache-PHP-MySQL (LAMP) можно преобразовать в гибкую среду Linux-Apache-PHP-ODBC (LAPO). Существуют два основных варианта ODBC-драйверов для Linux®: iODBC и unixODBC. Оба набора драйверов имеют свои плюсы и минусы, и оба работают с PHP, но с разными наборами баз данных. Я предпочитаю iODBC за его традиционно сильную связь с такими языками Web-программирования, как PHP и Ruby, а также стабильность при работе с ODBC-совместимыми базами данных, такими как MySQL и OpenLink Virtuoso. Тем не менее, это всего лишь вопрос выбора, и вы можете оценивать их исходя из собственных требований эффективности. Не считая тонких внутренних различий, iODBC и UnixODBC работают одинаково и с точки зрения связи с языком программирования – PHP-функции идентичны, — и с базой данных (например, на MySQL это никак не повлияет).

И iODBC, и UnixODBC есть в Linux Software Package Managers. Например, в командной строке Debian, Ubuntu или Linux Mint нужно выполнить команду sudo apt-get install iodbc .

ODBC в других системах

Apple Mac OS X поставляется с предустановленным iODBC, так что ничего устанавливать не нужно. ОС Windows® также поставляются с собственным драйвером ODBC.

Соединение базы данных с ODBC

Если вы еще не сделали этого, установите СУБД, такую как MySQL или PostgreSQL. Затем установите коннектор «ODBC-база данных». Он будет разным для разных баз данных, но для MySQL, например, коннектор устанавливается путем установки с Web-сайта MySQL драйвера, соответствующего операционной системе.

В дистрибутивах Linux, поддерживающих apt , можно запустить с консоли следующую команду: sudo apt-get install libmyodbc .

Нужно будет настроить ODBC-клиент для работы с установленной базой данных, запустив такую программу, как iodbcadm-gtk. Файл iODBC можно отредактировать и вручную. (В Linux этот файл часто находится в каталоге /etc/iodbc.ini.)

Пример: соединение PHP с ODBC

Теперь нужно установить драйвер PHP ODBC. Это можно сделать, добавив iODBC или unixODBC в сценарий компиляции PHP (очень сложно) или путем установки библиотеки PHP-ODBC. В дистрибутиве на базе apt можно использовать следующую команду: sudo apt-get install php5-odbc .

Выполните проверку, запустив PHP в интерактивном режиме ( php -а ). Это открывает интерактивную консоль PHP, из которой можно установить связь, как в примере, приведенном в листинге 1.

Листинг 1. ODBC-соединение из командной строки

Проанализируем код из листинга 1.

  1. Установка соединения с использованием функции odbc_connect () в PHP. В качестве параметров эта функция принимает строку коннектора ODBC, имя пользователя и пароль. Строка коннектора сопоставляется с файлом odbc.ini, так что заранее убедитесь, что они совпадают.
  2. Создание экземпляра переменной для строки, соответствующей оператору SQL.
  3. Выполнение SQL с использованием функции odbc_exec , которая принимает соединение и строку SQL, возвращая результирующий набор.
  4. Выборка только одной строки из этого результирующего набора с использованием функции odbc_fetch_row() , которая принимает результирующий набор в качестве параметра. Это итерационная функция, то есть при следующем обращении к ней вы получите следующий результат из набора (до окончания результатов в наборе, после чего она выдаст значение false).
  5. Использование функции odbc_result () , которая принимает результирующий набор и имя столбца (в виде строки) и возвращает значение ячейки в строке, на которую указывает итератор строк.
  6. Закрытие ODBC-соединения с использованием функции odbc_close , которая принимает само соединение.
  7. Выход из интерактивного режима PHP по команде exit .

Все это хорошо, но для решения масштаба Web-приложений этого мало. Чтобы проверить метод на Web-приложении клиент/сервер, необходимо установить Web-сервер, такой как Apache или Lighttpd. (При работе с Linux установите PHP-модуль для своего Web-сервиса, иначе PHP работать не будет).

В листинге 2 показан тот же подход, реализованный через Web-сервер. Код PHP подобен тому, что приведен в листинге 1, но экспорт результатов выполняется через XHTML, а не из командной строки.

Листинг 2. Пример ODBC-соединения на основе XHTML

В этом листинге есть дополнение, которого не было в листинге 1: теперь в полной мере используются преимущества итерационной функции odbc_fetch_row () , так как она помещена в цикл while . Это означает, что если SQL немного сложнее и обращается к таблице за несколькими результатами, то в таблице XHTML будет создана новая строка.

Существует много разновидностей XHTML и HTML с различной степенью удобства и поддержки браузеров. Листинг 2 генерирует стандартизированный XHTML 1.0 Strict, одну из лучших форм XHTML для разработки документов, ориентированных на данные и не зависящих от браузера.

Программирование PHP-ODBC

Существуют четыре основных типа ODBC-функций: функции соединения, запроса, выборки данных и сообщения об ошибках. Функции запроса выполняют стандартные операции базы данных по созданию, чтению, редактированию и удалению данных (т.н. операции CRUD).

Функции связи

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

Мы уже видели, что odbc_connect () принимает ODBC-совместимую строку установления связи, имя пользователя базы данных и пароль. В ответ она возвращает объект соединения, который можно использовать по всей PHP-программе. Следующий код демонстрирует пример:

В предыдущем примере мы уже видели также, что функция odbc_close () принимает объект соединения и завершает связь с ODBC и базой данных. Обязательно закрывайте свои соединения, в противном случае их станет слишком много, и придется перезапускать систему управления базами данных — или еще хуже, всю систему. Вот как это работает: odbc_close($connection); .

Функции запроса

Мы уже использовали функцию odbc_exec () ; она принимает объект соединения и строку SQL и возвращает объект результирующего набора. Объект результирующего набора ― это сложный зверь, так как обычно он находится в памяти СУБД и может быть расшифрован только теми функциями, которые с ним взаимодействуют. Строка odbc_exec () выглядит примерно так: $resultset = odbc_exec($connection, $sql); .

Функции odbc_prepare() и odbc_execute невероятно полезны для инъекции в SQL неизвестных переменных. Функция odbc_prepare () подготавливает SQL-оператор и СУБД, а затем odbc_execute () присылает переменные. Это мощнее, безопаснее и эффективнее, чем простое создание объединенной строки SQL в PHP и ее отправка посредством функции odbc_exec() . Вместе они выглядят примерно так:

В листинге 3 приведен хороший пример для поиска людей в таблице пользователей по адресу и дате рождения. Обратите внимание на вопросительный знак ( ? ) в строке SQL, которой означает что переменные определены в последовательном массиве функции odbc_execute() .

Листинг 3. Инъекция SQL-переменной с командами подготовки и исполнения

Функции приема

Функция odbc_fetch_row() принимает результирующий набор из запроса и сдвигает указатель итератора в следующую строку. Эта функция часто используется в сочетании с функцией odbc_result () для приема различных ячеек:

В предыдущих примерах odbc_result() принимала $resultset и строку с именем столбца и возвращала значение ячейки. Это используется в сочетании с функцией odbc_fetch_row() , чтобы указать конкретную строку в результирующем наборе:

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

Как и odbc_fetch_array() , функция odbc_fetch_object () выбирает объектно-ориентированную структуру, соответствующую строке. Она помещает имена столбцов в качестве свойств объекта и значения ячеек в качестве значений свойства:

Эта функция полезна для распечатки набора результатов в формате HTML. Это простая визуализация результатов, но она может быть полезна при создании прототипов или отладке:

Довольно удобная функция odbc_num_fields() просто берет набор результатов и указывает количество строк в этом наборе:

Решение проблем и отладка

Две удобные функции PHP ODBC — odbc_error() , которая возвращает код ошибки, если произошла ошибка, или значение false, если ошибки нет, и odbc_errormsg() , которая возвращает сообщения для пользователя – можно объединить в простую последовательность выдачи сообщений об ошибках:

Еще один совет: если вы получаете ошибки в процессе разработки, никогда не стесняйтесь добавлять печатные сообщения рядом с проблемными строками – конечно, при условии, что вы удалите эти «отладочные строки», когда будете демонстрировать свою программу. Вот PHP-функция, которая часто выручает:

Эта простая функция принимает любую переменную и отображает ее на экране. Переменная может быть как простым целым числом или строкой, так и сложным многомерным массивом или объектом.

Универсальная связь

Рассмотрим построение Web-приложений, которые можно развернуть в любом месте (примерами могут служить Drupal, WordPress или Joomla). Часто они строятся с использованием одной базы данных (например, MySQL) с ее специфическими функциями (например, mysql_connect () ), а затем тщательно перерабатываются для другой базы данных (например, PostgreSQL) с другими функциями (например, pg_connect () ). При использовании ODBC это лишнее, так как для перенастройки достаточно инициализации приложения, и функции ODBC индифферентны к системе базы данных.

Следует помнить, однако, что хотя все системы управления базами данных поддерживают стандартизованный SQL, иногда они содержат также собственные расширения. Вот почему преобразовать существующее приложение PHP-MySQL, PHP-PostgreSQL или PHP-MS-SQL в приложение PHP-ODBC не так просто. Поэтому, создавая новое приложение, нужно строго придерживаться стандартизированного SQL (или самых распространенных расширений SQL).

Как уже говорилось, ODBC можно использовать и для подключения к электронной таблице. Как и в случае баз данных, это делается с помощью коннектора. Их много – как с открытым исходным кодом, так и фирменных. Примером может служить Microsoft Office для Windows, который содержит ODBC-коннекторы для таблиц Excel. Возможно, работать с электронными таблицами с помощью ODBC весьма неудобно, и гораздо проще, наверное, преобразовать простую электронную таблицу в таблицу базы данных. Однако когда установлено ODBC-соединение с таблицей, его можно рассматривать как соединение с базой данных – те же функции ODBC PHP, но с SQL-подобным языком и стандартными формулами электронной таблицы Excel.

Применение связанных данных и Semantic Web

Перемещение связанных данных выглядит как подключение данных через Web. Этот подход имеет много преимуществ — в первую очередь для машин, понимающих отдельные элементы данных, но также и для пользователей, например, им становится легче находить информацию. Для перемещения связанных данных используются существующие стандарты Semantic Web (такие как Resource Description Framework и Web Ontology Language) и стандартизация интернет/Web (например, HTTP и OpenID). Становится понятно, что методы подключения к связанным данным несколько напоминают ODBC в том плане, что URI подобен строке соединения, а Semantic Web Query Language (SPARQL) подобен запросам SQL через установленное соединение.

Расширяя теорию о том, что связанные данные в какой-то мере аналогичны ODBC, можно установить ODBC-соединение с подключенным хранилищем данных (таким как triple store) и отправлять запросы SPARQL через ODBC-соединение. Это случай СУБД OpenLink Virtuoso, которая допускает связь через стандартное соединение ODBC.

Лицензирование и ODBC

iODBC лицензируется по двум лицензиям open source: GNU General Public License (GPL) и Berkeley Software Development. UnixODBC также лицензируется по лицензии open source GPL. Это означает, что все, что вы разработаете с применением этих библиотек, не обязательно должно быть открытым и может быть проприетарным. ODBC-драйвер от Microsoft также может быть частью проприетарного программного обеспечения, но связан лицензионными соглашениями по программному обеспечению Microsoft Office (в случае доступа к базам данных и таблицам Excel) и SQL Server (в случае баз данных SQL Server).

Заключение

ODBC может с успехом применяться для максимально универсальной связи. Это повышает эффективность разработки и позволяет расширять приложения для работы с новыми формами данных, такими как связанные данные на базе Web. Однако у этого подхода есть свои недостатки: для достижения универсального подключения нужно тщательно выбрать способ построения SQL-запросов, так как во всех системах управления базами данных можно использовать только подмножество общедоступных команд SQL. Хотелось бы надеяться, что эта статья окажется полезной для начала работы с базами данных через ODBC с использованием языка программирования PHP.

Ресурсы для скачивания

Похожие темы

  • Оригинал статьи (EN)
  • Раздел W3chools, посвященный SQL — полезен как учебник для начинающих и как справочник по SQL. В нем подробно описано то, что стандартизовано, а также то, что работает на той или иной системе управления базами данных. (EN)
  • Раздел W3Schools, посвященный PHP — еще один полезный ресурс для разработчиков, осваивающих PHP, а также для тех PHP-разработчиков, которым требуется справочник по языку.(EN)
  • iODBC.org: обширные сведения по установке и настройке iODBC, а также полезная информация по ODBC и коннекторам для различных СУБД и языков программирования. (EN)
  • unixODBC.org: информация по установке, настройке и драйверам коннекторов для UnixODBC.
  • MySQL.org: СУБД MySQL для разработчиков, которая с января 2010 года входит в семейство Oracle.(EN)
  • Коннектор ODBC MySQL можно загрузить прямо со страницы MySQL.(EN)
  • О драйвере ODBC Microsoft в MSDN и в файлах помощи программы ODBC Data Source Administrator. В этих двух местах можно найти сведения о работе с Access, SQL Server и Excel через ODBC. (EN)
  • PostgreSQL.org: страница СУБД PostgreSQL. (EN)
  • Проект PostgreSQL ODBC Connector: доступен в качестве бесплатного и открытого программного обеспечения. (EN)
  • OpenLink Virtuoso: «универсальный сервер». Обеспечивает Web-хостинг (в том числе с поддержкой языка PHP), базы данных, ODBC-соединения и технологию Semantic Web. OpenLink Software также отвечает за библиотеку с открытым исходным кодом iODBC, которая поставляется в версии open source и в проприетарной версии. (EN)
  • Для Web-серверов, отличных от OpenLink Virtuoso, ознакомьтесь с Apache HTTP Server и Lighttpd Server (EN)
  • PHP.net: все, что связано с PHP. (EN)
  • Подробная информация обо всех функциях PHP ODBC на сайте PHP.net. (EN)
  • LinkedData.org: хороший портал по связыванию открытых данных и Semantic Web. Портал W3C Semantic Web: еще один полезный ресурс.(EN)
  • Стандарты SQL Международной организации по стандартизации.

Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

источник

Читайте также:  Установка по на расберри

Добавить комментарий

Adblock
detector