Najwygodniejszym i optymalnym miejscem do przechowywania dużej ilości informacji są bazy danych.
Wyobraź sobie aplikację jak Discord, Instagram czy system do zarządzania serwerem gier – wszystkie te platformy muszą gdzieś przechowywać miliony danych użytkowników, wiadomości, postów czy statystyk graczy. Do tego właśnie służą bazy danych.
Aby PHP mógł korzystać z bazy danych, muszą być spełnione podstawowe warunki:
- Serwer bazy danych musi być zainstalowany i uruchomiony
- PHP musi posiadać dane dostępowe do połączenia (host, użytkownik, hasło, nazwa bazy)
- Odpowiednie rozszerzenie PHP musi być włączone (MySQLi lub PDO)
Sposoby komunikacji z bazą danych
W historii PHP istniały 3 sposoby łączenia się z bazą MySQL:
1. mysql (stare rozszerzenie) – USUNIĘTE
- Zdeprecjonowane: PHP 5.5.0 (2013)
- Całkowicie usunięte: PHP 7.0.0 (2015)
- Funkcje:
mysql_connect(),mysql_query()itp. - Status: NIE UŻYWAJ – nie działa w nowoczesnych wersjach PHP
2. MySQLi (MySQL Improved) – AKTYWNE
MySQLi to wersja poprawiona i aktualna wycofanej od PHP7 biblioteki mysql.
Cechy MySQLi:
- Może być stosowane w podejściu proceduralnym i obiektowym
- Współpracuje tylko z bazami MySQL/MariaDB
- Wspiera prepared statements (ochrona przed SQL Injection)
- Obsługuje transakcje
- Dostępne w PHP 5, 7, 8 i nowszych
Kiedy używać MySQLi:
- Gdy na pewno będziesz używać tylko MySQL/MariaDB
- Gdy pracujesz ze starszym kodem proceduralnym
- Gdy potrzebujesz specyficznych funkcji MySQL
3. PDO (PHP Data Objects) – AKTYWNE
PDO to rozszerzenie w pełni obiektowe, które współpracuje z wieloma silnikami bazy danych, nie tylko MySQL.
Cechy PDO:
- Uniwersalny interfejs dla różnych baz danych (MySQL, PostgreSQL, SQLite, Oracle, MS SQL Server…)
- Tylko tryb obiektowy
- Named parameters (
:nazwa) – bardziej czytelne zapytania - Prepared statements domyślnie
- Łatwa zmiana bazy danych bez przepisywania kodu
Kiedy używać PDO:
- Dla większości nowych projektów (zalecane!)
- Gdy planujesz możliwość zmiany bazy danych w przyszłości
- Gdy budujesz uniwersalną aplikację
- Gdy preferujesz czysty kod obiektowy
PDO vs MySQLi – Porównanie
| Cecha | PDO | MySQLi |
|---|---|---|
| Obsługiwane bazy | MySQL, PostgreSQL, SQLite, Oracle, MS SQL… | Tylko MySQL/MariaDB |
| Styl programowania | Tylko obiektowy | Proceduralny + obiektowy |
| Prepared statements | Named (:id) + positional (?) | Tylko positional (?) |
| Wydajność | Bardzo dobra | Nieznacznie szybsze dla MySQL |
| Łatwość użycia | Bardzo intuicyjne | Intuicyjne |
| Popularność | Bardzo popularne | Bardzo popularne |
Rekomendacja: Dla nowych projektów zalecamy PDO ze względu na uniwersalność i czytelność kodu.
MySQL i MariaDB
RDBMS (Relational Database Management System)
RDBMS to system zarządzania relacyjnymi bazami danych – dane przechowywane są w tabelach, które mogą być ze sobą powiązane relacjami (np. użytkownik → posty, gracz → statystyki).
MySQL i MariaDB są właśnie takimi systemami.
Historia i różnice
MySQL:
- Stworzony w 1995 roku
- Od 2010 roku należy do Oracle Corporation
- Najpopularniejszy system open-source do zarządzania bazami danych
- Używany przez: Facebook, Twitter, YouTube, Wikipedia
MariaDB:
- Fork MySQL utworzony w 2009 roku przez oryginalnych twórców MySQL
- Powstała jako alternatywa po przejęciu MySQL przez Oracle
- Licencja: GPL (w pełni open-source)
- Kompatybilna z MySQL (drop-in replacement do wersji 5.5)
- Szybszy rozwój i częstsze aktualizacje
- Oferuje lepsze silniki obsługi pamięci masowej (Aria, ColumnStore, MyRocks)
Co wybrać?
Oba rozwiązania są darmowe i świetnie sprawdzają się w nauce i projektach komercyjnych.
MySQL – jeśli:
- Pracujesz z narzędziami/aplikacjami wymagającymi MySQL
- Potrzebujesz wsparcia komercyjnego od Oracle
- Używasz starszej dokumentacji/tutoriali
MariaDB – jeśli:
- Zależy Ci na pełnej otwartości (GPL)
- Chcesz nowsze funkcje i szybsze aktualizacje
- Budujesz nowy projekt
Dla nauki: Oba systemy są prawie identyczne w użyciu – składnia SQL jest taka sama, więc nauka na jednym oznacza umiejętność pracy z drugim.
Więcej o tych dwóch systemach możecie przeczytać na stronie: https://hostclub.pl/mariadb-vs-mysql-porownanie-baz-danych/
Podstawowe pojęcia
Zanim przejdziemy do łączenia z bazą, poznaj kluczowe pojęcia:
baza danych (database) – Zorganizowany zbiór danych. Przykład: baza discord_app zawiera wszystkie dane aplikacji Discord.
tabela (table) – Struktura przechowująca dane w formie wierszy i kolumn. Przykład: tabela users przechowuje dane użytkowników.
kolumna (column/field) – Pojedyncze pole w tabeli. Przykład: username, email, created_at.
wiersz (row/record) – Pojedynczy rekord w tabeli. Przykład: jeden użytkownik to jeden wiersz.
klucz główny (primary key) – Unikalne pole identyfikujące wiersz. Przykład: id użytkownika.
SQL (Structured Query Language) – Język używany do komunikacji z bazą danych.
Podstawowe operacje (CRUD):
- CREATE (INSERT) – dodawanie danych
- READ (SELECT) – odczytywanie danych
- UPDATE – aktualizacja danych
- DELETE – usuwanie danych
Tworzenie bazy danych – dwa sposoby
1. Graficznie w phpMyAdmin
phpMyAdmin to narzędzie webowe do zarządzania bazami MySQL/MariaDB (dostępne w XAMPP, WAMP, na hostingu).
Kroki:
- Otwórz phpMyAdmin (zwykle
http://localhost/phpmyadmin) - Kliknij zakładkę „Bazy danych”
- Wpisz nazwę bazy (np.
social_media_app) - Wybierz kodowanie:
utf8mb4_unicode_ci(obsługa emoji i polskich znaków) - Kliknij „Utwórz”
2. Przez kod PHP
Możesz również tworzyć bazy bezpośrednio z poziomu PHP (przydatne przy automatyzacji).
Szczegóły w dalszej części materiału.
Co dalej?
W kolejnych częściach nauczysz się:
- Łączyć się z bazą danych (PDO i MySQLi)
- Wykonywać zapytania SQL (SELECT, INSERT, UPDATE, DELETE)
- Zabezpieczać aplikację przed SQL Injection
- Obsługiwać błędy połączenia
- Pracować z prepared statements
- Budować praktyczne aplikacje (system logowania, chat, panel gracza)
Jak sprawdzić czy masz włączone rozszerzenia w kodzie PHP
<?php
// Sprawdź MySQLi
if (extension_loaded('mysqli')) {
echo "MySQLi jest dostępne<br>";
} else {
echo "MySQLi NIE jest dostępne<br>";
}
// Sprawdź PDO
if (extension_loaded('pdo_mysql')) {
echo "PDO MySQL jest dostępne<br>";
} else {
echo "PDO MySQL NIE jest dostępne<br>";
}
// Lista wszystkich dostępnych sterowników PDO
echo "<br>Dostępne sterowniki PDO:<br>";
print_r(PDO::getAvailableDrivers());
?>
Jeśli coś nie działa, sprawdź plik php.ini i odkomentuj linie:
extension=mysqli
extension=pdo_mysql
Przykłady zastosowań baz danych
Żeby lepiej zrozumieć do czego służą bazy danych, zobacz przykłady z życia codziennego:
Aplikacja do streamingu muzyki (typ Spotify)
Tabele:
users– użytkownicy (id, username, email, premium)songs– utwory (id, title, artist, duration, file_path)playlists– playlisty (id, user_id, name, created_at)playlist_songs– piosenki w playlistach (playlist_id, song_id)listening_history– historia odsłuchań (user_id, song_id, played_at)
System zarządzania serwerem gier (typ Minecraft)
Tabele:
players– gracze (id, username, uuid, first_join, last_seen)player_stats– statystyki (player_id, kills, deaths, playtime, level)inventory– ekwipunek (player_id, item_id, quantity, slot)transactions– zakupy (id, player_id, item, price, date)bans– bany (player_id, reason, banned_by, expires_at)
Panel Discord Bot
Tabele:
guilds– serwery (id, name, owner_id, prefix, premium)guild_settings– ustawienia (guild_id, welcome_channel, log_channel, auto_role)commands_usage– statystyki (guild_id, command_name, uses, last_used)warnings– ostrzeżenia (user_id, guild_id, reason, moderator_id, date)