Thank you for reading this post, don't forget to subscribe!
Использование ODBC в PHP позволит делать SQL-запросы независимо от типа СУБД — это может быть MySQL/MariaDB, MS SQL, Sybase, Oracle, PostgreSQL и так далее. Мы рассмотрим подключение к MariaDB. Предложенная инструкция протестирована на Linux Ubuntu и CentOS.
ODBC connector
Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget.
а) на CentOS / Red Hat:
yum install wget
После установки wget перейдем в каталог /tmp:
cd /tmp
Открываем браузер и заходим на страницу загрузки коннекторов MariaDB и выбираем ODBC connector, а также нашу операционную систему, например:
* в данном случае мы загрузим коннектор для CentOS 8.
Ниже на этой же страницы мы увидим ссылку на скачивание нужного нам коннектора. Копируем данную ссылку:
С помощью wget и скопированной ссылки загружаем на сервер коннектор:
wget https://dlm.mariadb.com/1269825/Connectors/odbc/connector-odbc-3.1.10/mariadb-connector-odbc-3.1.10-centos8-amd64.tar.gz
Распаковываем его:
tar zxvf mariadb-connector-odbc-*.tar.gz
И копируем библиотеки в каталог /usr/lib64:
cp mariadb-connector-odbc-*-amd64/lib64/mariadb/lib* /usr/lib64/
После скачанный архив и распакованный каталог можно удалить:
rm -rf mariadb-connector-odbc-*
Установка и подготовка к работе СУБД
Для проверки настройки нам нужен сервер баз данных. Если его нет, то установим mariadb-server на тот же сервер, где и развернули ODBC.
а) для CentOS / Red Hat:
yum install mariadb-server
После установки запускаем сервис и настраиваем его на автозапуск:
systemctl enable mariadb --now
Задаем пароль для суперпользователя:
mysqladmin -u root password
Заходим в консоль SQL:
mysql -uroot -p
Создаем новую базу данных:
> CREATE DATABASE my_db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* для наших тестов мы создали базу с названием my_db.
Дадим права на подключение и работу с созданной базой данных:
> GRANT ALL PRIVILEGES ON my_db.* TO 'odbc_user'@'localhost' IDENTIFIED BY 'odbc_password';
* данной командой мы разрешили доступ к базе my_db пользователю odbc_user, который будет подключаться с локального компьютера и паролем odbc_password.
Подключаемся к созданной базе данных:
> use my_db;
Создаем простенькую таблицу:
[codesyntax lang="php"]
1 2 3 4 5 6 |
> 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; |
[/codesyntax]
* наша созданная таблица будет состоять из 3 столбцов — id, name и rights.
Добавим 3 строки в нашу таблицу:
> INSERT INTO users (`name`, `rights`) VALUES ('Дмитрий', 'admin'), ('Оля', 'superuser'), ('Антон' ,'operator');
Готово. Теперь выходим из sql-оболочки:
> quit
Установка и настройка ODBC
Устанавливаем сам ODBC.
а) для CentOS / Red Hat:
yum install unixODBC
Открываем конфигурационный файл:
vi /etc/odbcinst.ini
Проверяем наличие следующей записи (если ее нет, добавляем):
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
... [MariaDB] Description = ODBC for MariaDB Driver = /usr/lib/libmaodbc.so Driver64 = /usr/lib64/libmaodbc.so FileUsage = 1 ... |
[/codesyntax]
* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии).
Открываем файл:
vi /etc/odbc.ini
Добавляем DSN для подключения к нашему серверу и базе, которую создавали на предыдущем этапе:
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
[ODBC] Driver = MariaDB USER = odbc_user PASSWORD = odbc_password Server = 127.0.0.1 Database = my_db Port = 3306 |
[/codesyntax]
* где:
- ODBC — произвольное название для нашего подключения.
- Driver — драйвер, который мы будем использовать. Его мы описали в файле /etc/odbcinst.ini.
- USER — пользователь, под которым будем подключаться к базе. Используем данные для ранее созданной учетной записи в mariadb.
- PASSWORD — пароль для созданного ранее пользователя, под которым мы будем подключаться к базе.
- Server — сервер баз данных. В нашем примере локальный сервер.
- Database — имя созданной базы данных.
- Port — порт, на котором слушает сервер. 3306 используется по умолчанию для MariaDB.
Пробуем подключиться к базе с использованием ODBC:
isql -v ODBC
* где ODBC — название для подключения, которое мы задали на предыдущем шаге.
Мы должны увидеть командную строку для ввода команд sql — пробуем получить данные из нашей таблицы users:
> select * from users;
Мы должны увидеть что-то на подобие:
[codesyntax lang="php"]
1 2 3 4 5 6 7 |
+----+--------------+----------------+ | id | name | rights | +----+--------------+----------------+ | 1 | Дмитрий | admin | | 2 | Оля | superuser | | 3 | Антон | operator | +----+--------------+----------------+ |
[/codesyntax]
Можно выходить из sql-оболочки:
> quit
Настройка php
Теперь настроим подключение из php. Мы рассмотрим 2 способа подключения — с помощью odbc_connect и PDO.
Предварительно, создадим каталог, в который разместим тестовый скрипт для подключения к базе:
mkdir -p /var/www/php
odbc_connect
Ставим расширение php-odbc (а также сам php, если его нет на сервере).
а) для CentOS / Red Hat:
yum install php php-odbc
После установки создадим скрипт для проверки подключения:
vi /var/www/php/db.php
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $driver = "DRIVER=MariaDB"; $server = "127.0.0.1"; $db_name = "my_db"; $port = "3306"; $user = "odbc_user"; $password = "odbc_password"; $ocon = odbc_connect("{$driver};Server={$server};Database={$db_name};Port={$port};String Types=Unicode", $user, $password); $result = odbc_exec($ocon, "SELECT * FROM users LIMIT 10"); while ($mass = odbc_fetch_array ($result)) { print_r($mass); } odbc_close($ocon); ?> |
[/codesyntax]
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $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_close($ocon); ?> |
[/codesyntax]
* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:
- ODBC — название для нашего DSN.
- odbc_user — имя пользователя для подключения к базе данных.
- odbc_password — пароль для подключения к базе.
PDO
Ставим расширение php-pdo (а также сам php, если его нет на сервере).
а) для CentOS / Red Hat:
yum install php php-pdo
После установки создадим скрипт для проверки подключения:
vi /var/www/php/db.php
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $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)); } ?> |
[/codesyntax]
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $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)); } ?> |
[/codesyntax]
* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:
- odbc:ODBC — способ соединения с базой и название для нашего DSN.
- odbc_user — имя пользователя для подключения к базе данных.
- odbc_password — пароль для подключения к базе.
Проверка запроса
После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:
php /var/www/php/db.php
Мы должны получить следующий результат:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Array ( [id] => 1 [name] => Дмитрий [rights] => admin ) Array ( [id] => 2 [name] => Оля [rights] => superuser ) Array ( [id] => 3 [name] => Антон [rights] => operator ) |
[/codesyntax]
Подключение к MariaDB с помощью ODBC настроено.
Возможные ошибки
Call to undefined function odbc_connect()
Возникает при попытке запустить скрипт, который подключается к базе с помощью функции odbc_connect.
Причина: для нашей версии php не установлено расширение php-odbc.
Решение: команда для установки зависит от используемого типа дистрибутива Linux.
а) для CentOS / Red Hat:
yum install php-odbc