17. PHP – współpraca z bazami danych


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

CechaPDOMySQLi
Obsługiwane bazyMySQL, PostgreSQL, SQLite, Oracle, MS SQL…Tylko MySQL/MariaDB
Styl programowaniaTylko obiektowyProceduralny + obiektowy
Prepared statementsNamed (:id) + positional (?)Tylko positional (?)
WydajnośćBardzo dobraNieznacznie szybsze dla MySQL
Łatwość użyciaBardzo intuicyjneIntuicyjne
PopularnośćBardzo popularneBardzo 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: usernameemailcreated_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:

  1. Otwórz phpMyAdmin (zwykle http://localhost/phpmyadmin)
  2. Kliknij zakładkę „Bazy danych”
  3. Wpisz nazwę bazy (np. social_media_app)
  4. Wybierz kodowanie: utf8mb4_unicode_ci (obsługa emoji i polskich znaków)
  5. 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)

Przydatne linki