Цей розділ присвячений опису інструментів для взаємодії PHP додатків з базами даних MySQL.
Інтерфейс програмування додатків, або 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 і mysql. взаємодіють з ядром за допомогою фреймворка PHP розширень.
Зазвичай, розширення надають свій API-інтерфейс PHP програмісту, щоб той міг програмно скористатися наявними можливостями розширення. Однак, деякі розширення, що використовують фреймворк PHP розширень, не пропонують програмістам ніяких інтерфейсів.
Драйвер PDO MySQL, наприклад, не надає свого API. Він надає інтерфейс тільки абстрактного шару PDO, який лежить вище.
Терміни API і розширення не можна сприймати як синоніми, так як розширення може і не надавати API програмісту.
Які інструменти для роботи з MySQL пропонує PHP API?
API надає на вибір три набори інструментів для підключення до сервера баз даних MySQL:
Розширення PHP MySQL
Розширення PHP mysqli
Об'єкти даних PHP (PDO)
Кожен з них має свої переваги і недоліки. Метою даного огляду є короткий опис ключових особливостей кожного API.
Що таке розширення PHP MySQL?
Це оригінальне розширення дозволяє розробляти PHP додатки, які можуть взаємодіяти з базою даних MySQL. Розширення mysql надає процедурний інтерфейс і призначене для використання з MySQL версії 4.1.3 або більш ранніми версіями. Його також можна використовувати і з більш свіжими версіями СУБД, але в цьому випадку багато можливостей сервера, що з'явилися після версії 4.1.3, будуть недоступні програмісту.
Якщо ви працюєте з сервером MySQL 4.1.3 або пізніших версій, настійно рекомендується використовувати розширення mysqli.
Тексти програм розширення mysql розташовані в директорії розширень PHP ext / mysql.
Додаткову інформацію про розширення mysql можна почерпнути з ресурсу MySQL (Original).
Що таке PHP розширення mysqli?
Розширення mysqli. або як його ще називають поліпшене (improved) MySQL розширення, було розроблено, щоб дати можливість програмістам в повній мірі скористатися функціоналом MySQL сервера версій 4.1.3 і вище. Розширення mysqli включається в поставку PHP версій 5 і вище.
mysqli має ряд переваг і удосконалень у порівнянні з mysql. які полягають в наступному:Підтримка підготовлених запитів
Покращені можливості налагодження
Підтримка вбудованого сервера
При роботі з MySQL версій 4.1.3 і вище настійно рекомендується використовувати саме це розширення.
Нарівні з об'єктно-орієнтованим розширення надає і процедурний інтерфейс.
Розширення mysqli збирається за допомогою фреймворка розширень PHP, його вихідний код розташований в директорії ext / mysqli.
За додатковою інформацією про розширення mysqli. звертайтеся до розділу MySQLi.
Об'єкти даних 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. Програміст викликає функції інтерфейсу PDO API, а 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, розширення mysql і mysqli. а також драйвер PDO MYSQL використовують низкоуровневую бібліотеку, в якій реалізовані необхідні протоколи. У минулому була доступна тільки одна така бібліотека: Клієнтська бібліотека MySQL (MySQL Client Library), також відома як libmysqlclient.
Однак, інтерфейс, який надавала libmysqlclient. ні оптимізований для взаємодії з PHP додатками, так як спочатку libmysqlclient розроблялася для роботи з З додатками. Трохи пізніше був розроблений нативний драйвер MySQL (MySQL Native Driver) mysqlnd. який представляє собою альтернативу libmysqlclient для PHP.
Кожне з розширень mysql або mysqli. а також драйвер PDO MySQL можна індивідуально налаштувати для роботи або з libmysqlclient. або з mysqlnd. Так як mysqlnd створювався спеціально для PHP систем, у нього є перевага в швидкості і витрати пам'яті перед libmysqlclient. Тому його використання краще.
Нативний драйвер MySQL може використовуватися тільки з MySQL версії 4.1.3 і вище.
Нативний драйвер MYSQL збирається за допомогою фреймворка розширень PHP, його вихідний код розташований в директорії ext / mysqlnd. Він не надає API-інтерфейс програмісту PHP.
У наведеній таблиці наводиться порівняння функціоналу трьох основних методів підключення до MySQL з PHP:
Порівняння опцій MySQL API в PHP