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).
Этот раздел посвящён описанию инструментов для взаимодействия PHP-приложений с базами данных MySQL.
Что такое API?
Интерфейс программирования приложений, или API, определяет набор классов, методов, функций и переменных, которые можно вызывать из вашего приложения для выполнения поставленных задач. Применительно к PHP приложениям, которые должны взаимодействовать с базами данных, необходимые для этого API, как правило, представлены PHP-модулями.
API могут быть процедурными или объектно-ориентированными. При использовании процедурных API вы вызываете функции для выполнения каких-либо операций, а в случае объектно-ориентированных вы инстанцируете классы и затем вызываете методы созданных объектов. Второй подход, обычно, предпочтительнее, так как он более современный и способствует написанию более организованного кода.
API MySQL предоставляет несколько способов подключения к базе данных из PHP-приложения. В этом документе приводится описание этих способов и даются рекомендации, как выбрать наиболее подходящее решение в конкретной ситуации.
Что такое коннектор?
В документации MySQL термин коннектор (connector) относится к части программного обеспечения, отвечающей за подключение к серверу MySQL. MySQL предоставляет множество коннекторов для различных языков программирования, в частности для PHP.
Для обеспечения взаимодействия PHP приложения с сервером баз данных вам необходимо написать PHP-код, выполняющий подключение к серверу, выполнение запросов к базе данных и тому подобные операции. От программного обеспечения сервера требуется предоставить API, которое ваше PHP-приложение сможет использовать, а также функционал, ответственный за взаимодействие вашего приложения с сервером. Программное обеспечение, реализующее такой функционал, обычно называют коннектором, так как оно позволяет вашему приложению подключиться (to connect) к серверу баз данных. В ряде случаев коннектор для своих нужд может потребовать дополнительные библиотеки.
Что такое драйвер?
Драйвером называется часть программного обеспечения, отвечающая за взаимодействие приложения с конкретным типом серверов баз данных. Драйвер также может обращаться к внешним библиотекам, таким как клиентская библиотека MySQL или нативный драйвер MySQL. Эти библиотеки реализуют низкоуровневый протокол взаимодействия с сервером MySQL.
В качестве примера можно привести уровень абстракции для работы с базами данных Объекты данных PHP (PDO), который может использовать один из нескольких драйверов, специфичных для конкретных баз данных. В качестве такого драйвера может выступать драйвер PDO MYSQL, который позволяет PDO взаимодействовать с MySQL-сервером.
Иногда люди употребляют термины коннектор и драйвер, как синонимы, и это
может сбить с толку. В документации MySQL термин драйвер
означает участок программного кода, входящий в состав коннектора и отвечающий
за связь с конкретной СУБД.
Что такое модуль?
В документации к PHP вы будете неоднократно сталкиваться с термином модуль. Код PHP как такового состоит из ядра и присоединённых к нему необязательных модулей, которые увеличивают круг задач, которые может выполнять ядро. Относящиеся к MySQL модули, такие как mysqli и драйвер PDO MySQL, взаимодействуют с ядром с помощью фреймворка PHP модулей.
Обычно модули предоставляют свой API-интерфейс PHP-программисту, чтобы тот мог программно использовать возможности модуля. Однако, некоторые модули, использующие фреймворк PHP-модули, не предоставляют программистам никаких интерфейсов.
Драйвер PDO MySQL, например, не предоставляет своего API. Он предоставляет интерфейс только абстрактному слою PDO, лежащему выше.
Термины API и модуль нельзя воспринимать как синонимы, так как модуль может и не предоставлять API программисту.
Какие инструменты для работы с MySQL предлагает API PHP?
API предоставляет на выбор два набора инструментов для подключения к серверу баз данных MySQL:
Модуль PHP mysqli
Объекты данных PHP (PDO)
Каждый из них имеет свои достоинства и недостатки. Целью данного обзора является краткое описание ключевых особенностей каждого API.
Что такое PHP-модуль mysqli?
Модуль mysqli
, или как его ещё называют
улучшенный (improved) модуль MySQL, был разработан,
чтобы дать возможность программистам в полной мере воспользоваться
функционалом MySQL-сервера версий 4.1.3 и выше. Модуль
mysqli
включается в поставку PHP версий 5 и выше.
mysqli
имеет ряд преимуществ и усовершенствований
по сравнению с mysql
, которые заключаются в следующем:
Объектно-ориентированный интерфейс
Поддержка подготавливаемых запросов
Поддержка мультизапросов
Поддержка транзакций
Улучшенные возможности отладки
Наравне с объектно-ориентированным интерфейсом модуль предоставляет и процедурный интерфейс.
модуль mysqli
собирается при помощи фреймворка
модулей PHP, его исходный код расположен в директории
ext/mysqli.
За дополнительной информацией о модуле mysqli
,
обращайтесь к разделу MySQLi.
Что такое PDO?
Объекты данных PHP, или PDO, представляют из себя абстракцию коннектора баз данных для PHP приложений. PDO предоставляет API интерфейс взаимодействия с базой данных, не зависящий от конкретной СУБД. Теоретически, при использовании PDO можно поменять сервер баз данных, например с Firebird на MySQL, и это приведёт лишь к незначительным изменениям в PHP-коде.
В качестве других подобных абстракций можно привести JDBC для Java-приложений и DBI для Perl.
Наряду с преимуществами PDO, такими как простота и переносимость API, есть его главный недостаток: PDO поддерживает не все возможности сервера баз данных, доступные в последних версиях MySQL. Например, средствами PDO нельзя создавать множественные запросы, хотя MySQL их и поддерживает.
PDO собирается при помощи фреймворка модулей PHP, его исходный код расположен в директории ext/pdo.
Дополнительную информацию о PDO смотрите в разделе PDO.
Что такое драйвер PDO MYSQL?
Драйвер PDO MYSQL не является API как таковым, во всяком случае с точки зрения программиста. Драйвер PDO MYSQL располагается между самим PDO и сервером MySQL. Программист вызывает функции интерфейса API PDO, а PDO в свою очередь использует драйвер PDO MYSQL для обмена данными и командами с сервером MySQL.
Драйвер PDO MYSQL лишь один из многих PDO-драйверов. Для большинства СУБД есть свои PDO драйверы, как например драйверы для Firebird или PostgreSQL серверов.
Драйвер PDO MYSQL собирается при помощи фреймворка модулей PHP, его исходный код расположен в директории ext/pdo_mysql. Он не предоставляет API-интерфейс программисту PHP.
Дополнительно о драйвере PDO MYSQL можно прочитать в разделе MySQL.
Что такое нативный драйвер MySQL для PHP?
Чтобы обеспечить взаимодействие с сервером MySQL, модуль
mysqli
и драйвер
PDO MYSQL используют низкоуровневую библиотеку, в которой реализованы
необходимые протоколы. В прошлом была доступна только одна такая библиотека:
Клиентская библиотека MySQL (MySQL Client Library), также известная как
libmysqlclient
.
Однако, интерфейс, который предоставляла libmysqlclient
, не был
оптимизирован для взаимодействия с PHP-приложениями, так как изначально
libmysqlclient
разрабатывалась для работы с С-приложениями.
Несколько позже был разработан нативный драйвер MySQL (MySQL Native Driver)
mysqlnd
, который представляет собой альтернативу
libmysqlclient
для PHP.
И модуль mysqli
и драйвер PDO MySQL можно индивидуально
настроить для работы либо с libmysqlclient
, либо с
mysqlnd
. Так как mysqlnd
создавался
специально для PHP-систем, у него есть преимущество в скорости и расходах
памяти перед libmysqlclient
. Поэтому его использование
предпочтительней.
Нативный драйвер MYSQL собирается при помощи фреймворка модулей PHP, его исходный код расположен в директории ext/mysqlnd. Он не предоставляет API-интерфейс программисту PHP.
Сравнение возможностей
В приведённой таблице приводится сравнение функционала основных методов подключения к MySQL из PHP:
Модуль PHP mysqli | PDO (используя драйвер PDO MySQL и нативный драйвер MySQL) | |
---|---|---|
Версия PHP, в которой был внедрён функционал | 5.0 | 5.0 |
Статус разработки MySQL | Разработка продолжается | Разработка продолжается |
API поддерживает наборы символов | Да | Да |
API поддерживает подготавливаемые запросы на стороне сервера | Да | Да |
API поддерживает подготавливаемые запросы на стороне клиента | Нет | Да |
API поддерживает хранимые процедуры | Да | Да |
API поддерживает множественные запросы | Да | По большей части |
Поддержка всего функционала MySQL 4.1+ | Да | По большей части |
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).