Php with pdo odbc

ODBC and DB2 Functions (PDO_ODBC)

PDO_ODBC is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to databases through ODBC drivers or through the IBM DB2 Call Level Interface (DB2 CLI) library. PDO_ODBC currently supports three different «flavours» of database drivers: ibm-db2

Supports access to IBM DB2 Universal Database, Cloudscape, and Apache Derby servers through the free DB2 express-C client.

Supports access to database servers through the unixODBC driver manager and the database’s own ODBC drivers.

Offers a compile option for ODBC driver managers that are not explicitly supported by PDO_ODBC.

On Windows, php_pdo_odbc.dll has to be enabled as extension in php.ini . It is linked against the Windows ODBC Driver Manager so that PHP can connect to any database cataloged as a System DSN.

Installation

    PDO_ODBC is included in the PHP source. You can compile the PDO_ODBC extension as either a static or shared module using the following configure commands. ibm_db2
./configure --with-pdo-odbc=ibm-db2,/opt/IBM/db2/V8.1/

To build PDO_ODBC with the ibm-db2 flavour, you have to have previously installed the DB2 application development headers on the same machine on which you are compiling PDO_ODBC. The DB2 application development headers are an installable option in the DB2 servers, and are also available as part of the DB2 Application Development Client freely available for download from the IBM developerWorks » website. If you do not supply a location for the DB2 libraries and headers to the configure command, PDO_ODBC defaults to /home/db2inst1/sqllib . unixODBC

./configure --with-pdo-odbc=unixODBC,/usr/local

If you do not supply a location for the unixODBC libraries and headers to the configure command, PDO_ODBC defaults to /usr/local . generic

./configure --with-pdo-odbc=generic,/usr/local,libname,ldflags,cflags

Predefined Constants

The constants below are defined by this driver, and will only be available when the extension has been either compiled into PHP or dynamically loaded at runtime. In addition, these driver-specific constants should only be used if you are using this driver. Using driver-specific attributes with another driver may result in unexpected behaviour. PDO::getAttribute() may be used to obtain the PDO::ATTR_DRIVER_NAME attribute to check the driver, if your code can run against multiple drivers.

Читайте также:  Изменить версию php битрикс

PDO::ODBC_ATTR_USE_CURSOR_LIBRARY ( int )

  • PDO::ODBC_SQL_USE_IF_NEEDED (the default): use the ODBC cursor library when needed.
  • PDO::ODBC_SQL_USE_DRIVER : never use the ODBC cursor library.
  • PDO::ODBC_SQL_USE_ODBC : always use the ODBC cursor library.

PDO::ODBC_ATTR_ASSUME_UTF8 ( bool )

Windows only. If true , UTF-16 encoded character data ( CHAR , VARCHAR and LONGVARCHAR ) is converted to UTF-8 when reading from or writing data to the database. If false (the default), character encoding conversion may be done by the driver.

Runtime Configuration

The behaviour of these functions is affected by settings in php.ini .

PDO_ODBC Configuration Options

Name Default Changeable Changelog
pdo_odbc.connection_pooling «strict» PHP_INI_ALL
pdo_odbc.db2_instance_name NULL PHP_INI_SYSTEM This deprecated feature will certainly be removed in the future.

For further details and definitions of the PHP_INI_* modes, see the Where a configuration setting may be set.

Here’s a short explanation of the configuration directives.

Whether to pool ODBC connections. Can be one of «strict» , «relaxed» or «off» (equals to «» ). The parameter describes how strict the connection manager should be when matching connection parameters to existing pooled connections. strict is the recommend default, and will result in the use of cached connections only when all the connection parameters match exactly. relaxed will result in the use of cached connections when similar connection parameters are used. This can result in increased use of the cache, at the risk of bleeding connection information between (for example) virtual hosts.

This setting can only be changed from the php.ini file, and affects the entire process; any other modules loaded into the process that use the same ODBC libraries will be affected too, including the Unified ODBC extension.

relaxed matching should not be used on a shared server, for security reasons.

Leave this setting at the default strict setting unless you have good reason to change it.

If you compile PDO_ODBC using the db2 flavour, this setting sets the value of the DB2INSTANCE environment variable on Linux and UNIX operating systems to the specified name of the DB2 instance. This enables PDO_ODBC to resolve the location of the DB2 libraries and make cataloged connections to DB2 databases.

This setting can only be changed from the php.ini file, and affects the entire process; any other modules loaded into the process that use the same ODBC libraries will be affected too, including the Unified ODBC extension.

This setting has no effect on Windows.

Table of Contents

Источник

Настройка в Linux подключения к MariaDB из PHP с помощью ODBC

Обновлено и опубликовано

Опубликовано: 01.12.2020

Использование ODBC в PHP позволит делать SQL-запросы независимо от типа СУБД — это может быть MySQL/MariaDB, MS SQL, Sybase, Oracle, PostgreSQL и так далее. Мы рассмотрим подключение к MariaDB. Предложенная инструкция протестирована на Linux Ubuntu и CentOS. Наши действия разобьем по шагам:

ODBC connector

Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget. а) на CentOS / Red Hat:

Открываем браузер и заходим на страницу загрузки коннекторов MariaDB и выбираем ODBC connector, а также нашу операционную систему, например: * в данном случае мы загрузим коннектор для CentOS 8. Ниже на этой же страницы мы увидим ссылку на скачивание нужного нам коннектора. Копируем данную ссылку: С помощью wget и скопированной ссылки загружаем на сервер коннектор:

Установка и подготовка к работе СУБД

Для проверки настройки нам нужен сервер баз данных. Если его нет, то установим mariadb-server на тот же сервер, где и развернули ODBC. а) для CentOS / Red Hat:

* для наших тестов мы создали базу с названием my_db. Дадим права на подключение и работу с созданной базой данных:

* данной командой мы разрешили доступ к базе my_db пользователю odbc_user, который будет подключаться с локального компьютера и паролем odbc_password. Подключаемся к созданной базе данных:

> CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(512) NOT NULL,
`rights` varchar(64) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

* наша созданная таблица будет состоять из 3 столбцов — id, name и rights. Добавим 3 строки в нашу таблицу:

> INSERT INTO users (`name`, `rights`) VALUES (‘Дмитрий’, ‘admin’), (‘Оля’, ‘superuser’), (‘Антон’ ,’operator’);

Установка и настройка ODBC

.
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/libmaodbc.so
Driver64 = /usr/lib64/libmaodbc.so
FileUsage = 1
.

* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии). Открываем файл:

[ODBC]
Driver = MariaDB
USER = odbc_user
PASSWORD = odbc_password
Server = 127.0.0.1
Database = my_db
Port = 3306
  • ODBC — произвольное название для нашего подключения.
  • Driver — драйвер, который мы будем использовать. Его мы описали в файле /etc/odbcinst.ini.
  • USER — пользователь, под которым будем подключаться к базе. Используем данные для ранее созданной учетной записи в mariadb.
  • PASSWORD — пароль для созданного ранее пользователя, под которым мы будем подключаться к базе.
  • Server — сервер баз данных. В нашем примере локальный сервер.
  • Database — имя созданной базы данных.
  • Port — порт, на котором слушает сервер. 3306 используется по умолчанию для MariaDB.

Пробуем подключиться к базе с использованием ODBC:

* где ODBC — название для подключения, которое мы задали на предыдущем шаге.

Мы должны увидеть командную строку для ввода команд sql — пробуем получить данные из нашей таблицы users:

Мы должны увидеть что-то на подобие:

Можно выходить из sql-оболочки:

Настройка php

Теперь настроим подключение из php. Мы рассмотрим 2 способа подключения — с помощью odbc_connect и PDO.

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

odbc_connect

Ставим расширение php-odbc (а также сам php, если его нет на сервере).

apt-get install php php-odbc

После установки создадим скрипт для проверки подключения:

$driver = «DRIVER=MariaDB»;
$server = «127.0.0.1»;
$db_name = «my_db»;
$port = «3306»;
$user = «odbc_user»;
$password = «odbc_password»;
$ocon = odbc_connect(«;Server=;Database=;Port=;String Types=Unicode», $user, $password);

$result = odbc_exec($ocon, «SELECT * FROM users LIMIT 10»);
while ($mass = odbc_fetch_array ($result)) print_r($mass);
>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:

$ocon = odbc_connect(«ODBC», «odbc_user», «odbc_password»);

$result = odbc_exec($ocon, «SELECT * FROM users LIMIT 10»);
while ($mass = odbc_fetch_array ($result)) print_r($mass);
>

* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:

  1. ODBC — название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

PDO

Ставим расширение php-pdo (а также сам php, если его нет на сервере).

apt-get install php php-pdo

После установки создадим скрипт для проверки подключения:

$pcon = new PDO(«odbc:Driver=MariaDB;Server=127.0.0.1;Database=my_db;»,»odbc_user»,»odbc_password»);

try $result = $pcon->query(«SELECT * FROM users LIMIT 10»);
$mass = $result->fetchAll(PDO::FETCH_ASSOC);
print_r($mass);
> catch (Exception $e) throw new PDOException(var_export($pcon->errorInfo(),true));
>

* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.

Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:

$pcon = new PDO(«odbc:ODBC»,»odbc_user»,»odbc_password»);

try $result = $pcon->query(«SELECT * FROM users LIMIT 10»);
$mass = $result->fetchAll(PDO::FETCH_ASSOC);
print_r($mass);
> catch (Exception $e) throw new PDOException(var_export($pcon->errorInfo(),true));
>

* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:

  1. odbc:ODBC — способ соединения с базой и название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. odbc_password — пароль для подключения к базе.

Проверка запроса

После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:

Мы должны получить следующий результат:

Array
(
[id] => 1
[name] => Дмитрий
[rights] => admin
)
Array
(
[id] => 2
[name] => Оля
[rights] => superuser
)
Array
(
[id] => 3
[name] => Антон
[rights] => operator
)

Подключение к MariaDB с помощью ODBC настроено.

Возможные ошибки

Call to undefined function odbc_connect()

Возникает при попытке запустить скрипт, который подключается к базе с помощью функции odbc_connect.

Причина: для нашей версии php не установлено расширение php-odbc.

Решение: команда для установки зависит от используемого типа дистрибутива Linux.

Проверить, что нужное расширение установлено можно командой:

Читайте также

Вам также может оказаться полезным:

Источник

Оцените статью