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

Использование ODBC в PHP позволит делать SQL-запросы независимо от типа СУБД — это может быть MySQL/MariaDB, MS SQL, Sybase, Oracle, PostgreSQL и так далее. Мы рассмотрим подключение к MariaDB. Предложенная инструкция протестирована на Linux Ubuntu и CentOS.
Наши действия разобьем по шагам:
Установка ODBC-коннектора
Подготовка к работе MariaDB
Настройка ODBC
Пример PHP-скрипта для подключения к базе данных
С использованием odbc_connect
С использованием PDO
Проверка работы скрипта
Возможные проблемы
Читайте также
ODBC connector
Для начала мы должны установить ODBC connector. Нам понадобиться скачать на наш сервер архив, поэтому сначала инсталлируем wget.
а) на CentOS / Red Hat:
yum install wget
б) на Ubuntu / Debian:
apt-get 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
б) для Ubuntu / Debian:
apt-get 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;
Создаем простенькую таблицу:
> 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');
Готово. Теперь выходим из sql-оболочки:
> quit
Установка и настройка ODBC
Устанавливаем сам ODBC.
а) для CentOS / Red Hat:
yum install unixODBC
б) для Ubuntu / Debian:
apt-get install unixodbc odbcinst
Открываем конфигурационный файл:
vi /etc/odbcinst.ini
Проверяем наличие следующей записи (если ее нет, добавляем):
...
[MariaDB]
Description = ODBC for MariaDB
Driver = /usr/lib/libmaodbc.so
Driver64 = /usr/lib64/libmaodbc.so
FileUsage = 1
...
* в данном примере описано подключение к СУБД с драйвером MariaDB и путем до файла с библиотекой (отдельно для 32- и 64-разрядной версии).
Открываем файл:
vi /etc/odbc.ini
Добавляем DSN для подключения к нашему серверу и базе, которую создавали на предыдущем этапе:
[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:
isql -v ODBC
* где ODBC — название для подключения, которое мы задали на предыдущем шаге.
Мы должны увидеть командную строку для ввода команд sql — пробуем получить данные из нашей таблицы users:
> select * from users;
Мы должны увидеть что-то на подобие:
+----+--------------+----------------+
| id | name | rights |
+----+--------------+----------------+
| 1 | Дмитрий | admin |
| 2 | Оля | superuser |
| 3 | Антон | operator |
+----+--------------+----------------+
Можно выходить из 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
б) для Ubuntu / Debian:
apt-get install php php-odbc
После установки создадим скрипт для проверки подключения:
vi /var/www/php/db.php
<?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);
?>
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью odbc_connect может ссылаться для соединения на него. Итого, получаем:
<?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);
?>
* обратите внимание, что мы передаем функции odbc_connect только 3 параметра для подключения:
- ODBC — название для нашего DSN.
- odbc_user — имя пользователя для подключения к базе данных.
- odbc_password — пароль для подключения к базе.
PDO
Ставим расширение php-pdo (а также сам php, если его нет на сервере).
а) для CentOS / Red Hat:
yum install php php-pdo
б) для Ubuntu / Debian:
apt-get install php php-pdo
После установки создадим скрипт для проверки подключения:
vi /var/www/php/db.php
<?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));
}
?>
* в данном листинге мы задаем параметры для подключения к локальному серверу (127.0.0.1) с учетными данными, которые создали при настройке СУБД. После мы выполняем выборку и выводим результат на экран.
Или же мы можем сократить наш скрипт. Ранее для проверки мы создали ODBC DSN в файле /etc/odbc.ini. PHP с помощью PDO может ссылаться для соединения на него. Итого, получаем:
<?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));
}
?>
* обратите внимание, что мы передаем функции PDO только 3 параметра для подключения:
- odbc:ODBC — способ соединения с базой и название для нашего DSN.
- odbc_user — имя пользователя для подключения к базе данных.
- odbc_password — пароль для подключения к базе.
Проверка запроса
После того, как мы создали скрипт проверки любым из вышеописанных способов, запускаем его на исполнение:
php /var/www/php/db.php
Мы должны получить следующий результат:
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.
а) для CentOS / Red Hat:
yum install php-odbc
б) для Ubuntu / Debian:
apt-get install php-odbc
Проверить, что нужное расширение установлено можно командой:
php -i | grep odbc
Читайте также
Вам также может оказаться полезным: