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

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

Использование 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

б) на 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 столбцов — idname и 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 параметра для подключения:

  1. ODBC — название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. 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 параметра для подключения:

  1. odbc:ODBC — способ соединения с базой и название для нашего DSN.
  2. odbc_user — имя пользователя для подключения к базе данных.
  3. 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

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

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

1. Установка и запуск MS SQL на Linux Ubuntu

2. Установка MariaDB на CentOS или Ubuntu

# DevOps # Linux # MySQL # Базы данных
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет