Короткий огляд

Цей розділ присвячений опису інструментів для взаємодії додатків 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 (PDO)

Що таке драйвер 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:

Порівняння опцій MySQL API у PHP

Модуль PHP mysqliPDO (используя драйвер PDO MySQL и нативный драйвер MySQL)
Версія PHP, в якій було впроваджено функціонал5.05.0
Статус розробки MySQLРозробка продовжуєтьсяРозробка продовжується
API підтримує набори символівТакТак
API підтримує запити, що готуються на стороні сервераТакТак
API підтримує запити, що готуються на стороні клієнтаНіТак
API підтримує збережені процедуриТакТак
API підтримує множинні запитиТакЗдебільшого
Підтримка всього функціоналу MySQL 4.1+ТакЗдебільшого