PHP 8.4.2 Released!

Краткий обзор

Раздел описывает инструменты, которые помогают программистам разрабатывать PHP-приложения, которые взаимодействуют с базой данных MySQL.

Об API-интерфейсе

Программный интерфейс приложения (англ. Application Programming Interface, API) определяет набор классов, методов, функций и переменных, к которым приложению потребуется обращаться, чтобы выполнить поставленные задачи. PHP-приложения взаимодействуют с базами данных через API-интерфейсы, которые приложениям обычно открывают PHP-модули.

Программисты взаимодействуют с модулями через процедурный или объектно-ориентированный API-интерфейс. При работе через процедурный API задачи выполняют путём вызова функций, при взаимодействии через объектно-ориентированный API-интерфейс создают экземпляры классов, а затем вызывают методы этих объектов. Из этих двух интерфейсов часто выбирают последний, поскольку код в объектно-ориентированном стиле лучше организован, что снижает сложность восприятия кода и упрощает тестирование и поддержку.

Язык программирования PHP предлагает разработчикам несколько API-интерфейсов, через которые PHP-приложения взаимодействуют с базами данных MySQL. Документ описывает эти интерфейсы и даёт рекомендации по выбору конкретного способа подключения к базе данных из приложения.

О коннекторе

В MySQL-документации термин коннектор (англ. connector) относится к части программного обеспечения, которая разрешает приложению подключаться к серверу баз данных MySQL. БД MySQL предоставляет коннекторы для разных языков программирования, включая язык PHP.

Разработчику потребуется написать PHP-код, чтобы PHP-приложение научилось взаимодействовать с сервером баз данных: подключаться, отправлять запросы и выполнять другие операции, которые связаны с базой данных. Серверу баз данных потребуется ПО, чтобы предоставить API-интерфейс, через который PHP-приложение будет взаимодействовать с сервером, и чтобы управлять обменом информацией между приложением и сервером баз данных, для чего иногда также требуются промежуточные библиотеки. Это программное обеспечение называется коннектором, поскольку разрешает приложению подключаться (англ. to connect) к серверу баз данных.

О драйвере

Драйвер — часть программного обеспечения, которую разработали для взаимодействия приложения с конкретным типом сервера баз данных. Приложение вызывает методы коннектора, тот обращается к своему драйверу конкретной СУБД, а драйвер со своей стороны обращается к нижележащим библиотекам — клиентской библиотеке MySQL Client Library или встроенному драйверу MySQL Native Driver. Эти библиотеки реализуют низкоуровневый протокол взаимодействия с MySQL-сервером баз данных.

Например, PHP-модуль PDO, который поддерживает доступ к базам данных на уровне абстракции, содержит набор драйверов для доступа к конкретным базам данных. В список доступных модулю драйверов входит драйвер PDO_MYSQL, который разрешает модулю PDO взаимодействовать с сервером MySQL.

Термины «коннектор» и «драйвер» иногда употребляют как синонимы, это сбивает с толку. В MySQL-документации термин драйвер зарезервировали за программным обеспечением, которое предоставляет часть пакета коннектора для конкретной базы данных.

О модуле

В PHP-документации встречается ещё один термин — модуль. Код самого PHP состоит из ядра и дополнительных модулей, которые расширяют функциональность ядра. Для работы с СУБД MySQL ядро PHP расширили модулем mysqli и модулем PDO с MySQL-драйвером. Оба модуля включили в инфраструктуру модулей языка PHP.

Обычно модули предоставляют PHP-программисту API-интерфейс, через который разработчик получает доступ к функциям модуля программно. При этом отдельные модули в инфраструктуре PHP-модулей не раскрывают для программиста никаких интерфейсов.

MySQL-драйвер модуля PDO, например, не раскрывает API-интерфейс для программиста, но предоставляет интерфейс вышележащему абстрактному слою, который представляет модуль PDO.

Термины «API-интерфейс» и «модуль» нельзя воспринимать как одно и то же, поскольку модуль не обязан раскрывать API-интерфейс для программиста.

О главных API-интерфейсах языка PHP для работы с БД MySQL

PHP предлагает два API-интерфейса для подключения к серверу баз данных MySQL:

  • PHP-модуль mysqli

  • PHP-модуль PDO

Каждый модуль содержит достоинства, но встречаются и недостатки. Цель следующей части обзора состоит в кратком описании характеристик каждого API-интерфейса.

О PHP-модуле mysqli

Модуль mysqli, или улучшенный модуль MySQL (англ. improved MySQL), разработали, чтобы PHP-программисты получили выгоду, которую дают новые функции MySQL-систем версии 4.1.3 и выше. Модуль mysqli включается в пакет PHP версии 5 и выше.

Модуль mysqli содержит преимущества, главные из которых по сравнению с модулем mysql состоят в следующем:

  • Объектно-ориентированный интерфейс

  • Поддержка подготовленных запросов

  • Поддержка мультизапросов

  • Поддержка транзакций

  • Расширенные инструменты отладки

Наравне с объектно-ориентированным интерфейсом модуль предоставляет и процедурный интерфейс.

Модуль mysqli встраивается в инфраструктуру модулей языка PHP, исходный код модуля лежит в каталоге ext/mysqli.

Подробнее о модуле mysqli рассказывает раздел MySQLi.

О модуле PDO

Модуль PDO — абстракция коннектора, которая определяет интерфейс доступа к базам данных для PHP-приложений. Модуль PDO раскрывает для PHP-приложений согласованный API-интерфейс, при взаимодействии с которым приложение не зависит от типа конкретного сервера баз данных, к которому подключается. Теоретически, при работе через API-интерфейс модуля PDO один сервер баз данных легко заменить другим, например поменять Firebird на MySQL, и для этого потребуются внести в PHP-код только незначительные изменения.

К другим примерам абстракций коннекторов баз данных относятся пакет JDBC для Java-приложений и пакет DBI для приложений на языке программирования Perl.

Преимущества модуля PDO состоят в чистоте, простоте и переносимости API-интерфейса, а главный недостаток модуля — недоступность продвинутых функций, которые поддерживаются последними версиями MySQL-сервера. К таким функциям, например, относятся множественные запросы, которые модуль PDO не поддерживает.

Модуль PDO встраивается в инфраструктуру модулей языка PHP, исходный код модуля лежит в директории ext/pdo.

Подробнее о модуле рассказывает раздел PDO.

О драйвере модуля PDO для работы с СУБД MySQL

MySQL-драйвер модуля PDO не относится к API-интерфейсу, который модуль раскрывает для программиста. MySQL-драйвер модуля PDO лежит на уровне ниже самого модуля PDO и взаимодействует с MySQL-сервером. Программист вызывает функции API-интерфейса модуля PDO, а модуль взаимодействует с драйвером для отправки данных и команд на MySQL-сервер.

MySQL-драйвер модуля PDO взаимодействует с MySQL-серверами, но модуль также включает драйверы для взаимодействия с серверами баз данных Firebird, PostgreSQL и другими СУБД.

MySQL-драйвер модуля PDO встраивается в инфраструктуру модулей языка PHP, исходный код модуля лежит в каталоге ext/pdo_mysql. Модуль не раскрывает API-интерфейс PHP-программисту.

Дополнительно о MySQL-драйвере модуля PDO рассказывает раздел MySQL.

О родном драйвере PHP для работы с СУБД MySQL

Модуль mysqli и MySQL-драйвер модуля PDO взаимодействуют с MySQL-сервером путём обращения к низкоуровневой библиотеке, которая реализует протокол взаимодействия с СУБД. Раньше единственной доступной библиотекой была клиентская библиотека MySQL Client Library, которая распространяется как пакет libmysqlclient.

Однако интерфейс, который предоставляла библиотека libmysqlclient, не был оптимизирован для взаимодействия с PHP-приложениями, поскольку библиотека libmysqlclient разрабатывалась для работы с приложениями на языке C. Поэтому как альтернативу MySQL-библиотеке libmysqlclient разработали родной PHP-драйвер для взаимодействия с СУБД MySQL — MySQL Native Driver, который распространяется как PHP-модуль и называется mysqlnd.

Модуль mysqli и PDO-драйвер для СУБД MySQL настраиваются отдельно — либо для работы с внешней библиотекой libmysqlclient, либо для работы с родным PHP-драйвером mysqlnd. Внутренний драйвер работает быстрее и расходует меньше памяти по сравнению с внешней библиотекой libmysqlclient, поскольку драйвер mysqlnd разработали непосредственно для работы в PHP-системах. Поэтому лучше предпочесть родной PHP-драйвер.

Родной PHP-драйвер для взаимодействия с СУБД MySQL встраивается в инфраструктуру модулей языка PHP, исходный код модуля лежит в каталоге ext/mysqlnd. Модуль не раскрывает API-интерфейс для PHP-программиста.

Сравнение функций модулей

Следующая таблица сравнивает функциональность основных методов подключения к СУБД MySQL из PHP-приложения:

Сравнение API-интерфейсов для взаимодействия PHP-приложений с СУБД MySQL
  PHP-модуль mysqli PHP-модуль PDO через драйвер PDO_MySQL и родной PHP-драйвер для СУБД MySQL
Версия PHP, в которой представили модуль 5.0 5.0
Статус разработки MySQL Разработка продолжается Разработка продолжается
API поддерживает наборы символов Да Да
API поддерживает подготовленные запросы на стороне сервера Да Да
API поддерживает подготавливаемые запросы на стороне клиента Нет Да
API поддерживает хранимые процедуры Да Да
API поддерживает множественные запросы Да По большей части
Поддержка всего функционала MySQL 4.1+ Да По большей части
Добавить

Примечания пользователей 1 note

up
26
guatebus at dot gmail dot com
11 years ago
The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.

Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).
To Top