Rozszerzenia PHP do komunikacji z bazą danych: mysql, mysqli, PDO

Mirosław Zelent

W celu połączenia się z bazą danych z użyciem PHP możemy teoretycznie skorzystać z trzech możliwych tzw. rozszerzeń (czyli bibliotek) komunikacyjnych. Pierwszą z nich jest mysql (biblioteka jednak wycofana od PHP w wersji 7.0.0), mysqli (gdzie i oznacza improoved, czyli wersję poprawioną, aktualną) albo możemy użyć rozszerzenia o nazwie PDO - PHP Data Objects (w pełni obiektowego).

Poznamy teraz szczegóły dotyczące wszystkich rozszerzeń, jednak zanim to zrobimy zapoznajmy się z definicją akronimu API.

API
(ang. Application Programing Interface) - interfejs klas, metod, funkcji, zmiennych, parametrów, których aplikacja PHP używa w celu zrealizowania zaplanowanych przez programistę zadań (w naszym kontekście chodzi o komunikację z bazą danych.

Interfejs API może być albo proceduralny albo obiektowy. Jeżeli jest proceduralny, to oznacza to, że operacje bazodanowe realizowane są przez odpowiednio przygotowane i wywołane funkcje. Każda funkcja wykonuje unikalne, dające się jednoznacznie wyróżnić działanie związane z bazą danych. Parametry przekazujemy do funkcji jako argumenty w nawiasie, w momencie ich wywołania.

Jeśli zaś interfejs API jest obiektowy, to oznacza to, iż w aplikacji są tworzone obiekty (na podstawie "przepisu" klas), a operacje bazodanowe realizowane są poprzez metody (czyli funkcje wewnątrz klas) wywoływane na rzecz tychże stworzonych obiektów. Oprócz metod, obiekty mogą posiadać przypisane atrybuty (parametry, właściwości). Więcej informacji na temat podejścia obiektowego (klasy, obiekty, metody, atrybuty, konstruktory, destruktory itd.) znajdziesz w tym tutorialu.

Rozszerzenie mysql
Dodatek wprowadzony w wersji 2.0 specyfikacji języka PHP, został zdeprecjonowany od PHP. 5.5.0 oraz całkowicie usunięty od PHP 7.0.0. Nie zaleca się stosowania mysql we współczesnych projektach - zamiast tej biblioteki powinniśmy użyć mysqli lub PDO. Biblioteka posiada interfejs jedynie proceduralny, brak interfejsu obiektowego.
Rozszerzenie mysqli (i = ang. improved)
Dodatek wprowadzony w wersji 5.0 specyfikacji języka PHP, usprawnił i zaktualizował komunikację do tej pory realizowaną biblioteką mysql. To rozszerzenie oferuje zarówno API proceduralne jak i obiektowe. W pełni aktualne, współczesne, zalecane do użycia w nowych projektach. Aczkolwiek w odróżnieniu od dodatku PDO (który potrafi obsłużyć różne silniki bazodanowe), mysqli współpracuje tylko bazami MySQL.
Rozszerzenie PDO (ang. PHP Data Objects)
Dodatek wprowadzony również w wersji 5.0 specyfikacji języka PHP, zrealizowany w pełni obiektowo. W pełni aktualne, współczesne, zalecane do użycia w nowych projektach. Jako jedyne rozszerzenie potrafi oprócz MySQL obsłużyć różne silniki bazodanowe, w tym m.in.: PostgreSQL, Oracle, MS SQL, SQLite, IBM DB2, Firebird i wiele innych.

Przyjrzyjmy się teraz porównaniu rozszerzeń w postaci tabelarycznej:

Rozszerzenie PHPmysqlmysqliPDO
Wprowadzono w wersji PHP2.05.05.0
Wsparcie dla rozszerzeniazdeprecjonowane od PHP 5.5.0, usunięte od PHP 7.0.0aktywnie wspieraneaktywnie wspierane
Zalecane dla nowych projektównietaktak
Interfejs proceduralnytaktaknie
Interfejs obiektowynietaktak
Użycie różnych silników (driverów) SQLnienietak
Wsparcie funkcji MySQL 5.1+nietakwiększość
Prepared Statements po stronie serweranietaktak
Prepared Statements po stronie klientanienietak

W technikum nauczymy się korzystać z bazy danych z użyciem biblioteki mysqli (zarówno w metodzie proceduralnej, jak i obiektowej). A co do biblioteki PDO, która jest już tylko obiektowa, to zainteresowanych odsyłam do odcinka piątego serii dedykowanej PHP, gdzie wyjaśniamy i pokazujemy w akcji szczegółowe różnice pomiędzy użyciem mysqli i PDO.