Komunikacja aplikacji internetowej z bazą SQL

Słownik kwalifikacji INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Aplikacja internetowa działająca po stronie serwera (np. napisana w PHP) bardzo często pobiera, zapisuje lub modyfikuje dane w bazie SQL. Współpraca aplikacji z bazą ma określony, stały schemat — i znajomość tej kolejności to klasyczne pytanie egzaminacyjne w kwalifikacji INF.03 (Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych).

Nie można wykonać zapytania SQL bez wcześniejszego połączenia z serwerem bazy danych — to logiczna podstawa wszystkich operacji.

Infografika: komunikacja aplikacji internetowej z bazą SQL — kolejność operacji od połączenia mysqli_connect przez zapytanie SQL po pobranie wyników i zamknięcie mysqli_close, z funkcjami PHP dla MySQL i PostgreSQL

Poprawna kolejność działań

Standardowa sekwencja operacji aplikacji z bazą SQL:

  1. Nawiązanie połączenia z serwerem baz danych — aplikacja łączy się, podając adres hosta, użytkownika, hasło i ewentualnie port.
  2. Wybór bazy danych — wskazanie konkretnej bazy na serwerze (na jednym serwerze może być wiele baz).
  3. Wykonanie zapytania SQL — wysłanie polecenia (SELECT, INSERT, UPDATE, DELETE, CREATE itd.).
  4. Pobranie i przetworzenie wyników — odczyt danych zwróconych przez bazę (zwykle dla SELECT) i ich wyświetlenie na stronie.
  5. Zamknięcie połączenia — zwolnienie zasobów serwera po zakończeniu pracy.

Każdy z tych kroków odpowiada konkretnej funkcji w języku programowania (w PHP są to funkcje rodziny mysqli_* lub pg_*).

Przykład w PHP — biblioteka MySQLi

// 1. Połączenie z serwerem
$conn = mysqli_connect("localhost", "user", "haslo", "sklep");
if (!$conn) {
    die("Brak połączenia z bazą danych");
}

// 2-3. Wykonanie zapytania SQL
$result = mysqli_query($conn, "SELECT nazwa, cena FROM produkty");

// 4. Pobranie i wyświetlenie wyników
while ($row = mysqli_fetch_assoc($result)) {
    echo $row["nazwa"] . " - " . $row["cena"] . " zł<br>";
}

// 5. Zamknięcie połączenia
mysqli_close($conn);

W tym przykładzie wybór bazy odbywa się od razu w mysqli_connect() (czwarty parametr). Można też zrobić to osobno funkcją mysqli_select_db($conn, "sklep").

Funkcje połączenia — mysqli_connect, pg_connect

MySQL — mysqli_connect()

mysqli_connect($a, $b, $c, $d)

Argumenty kolejno:

  • $a — adres serwera (host), np. "localhost",
  • $b — nazwa użytkownika bazy danych,
  • $c — hasło użytkownika,
  • $d — nazwa bazy danych (opcjonalnie — można też wybrać później funkcją mysqli_select_db).

Aby funkcja zwróciła poprawne połączenie, wszystkie te dane muszą być prawidłowe.

PostgreSQL — pg_connect()

Funkcja pg_connect w PHP służy do nawiązania połączenia z bazą danych PostgreSQL (a nie MySQL!). Składnia różni się od mysqli — parametry przekazuje się jako jeden napis (DSN):

$conn = pg_connect("host=localhost dbname=sklep user=admin password=tajne");

Więcej w haśle pg_connect.

Wykonanie zapytania — mysqli_query, stara mysql_query

Po połączeniu wysyła się zapytanie SQL:

$result = mysqli_query($conn, "SELECT * FROM mieszkancy");

Funkcja zwraca:

  • obiekt wyniku (lub true) — gdy zapytanie się powiedzie,
  • false — gdy zapytanie nie powiedzie się (np. błąd składni SQL, brak tabeli, brak uprawnień, zerwane połączenie).

Dlatego typowy schemat sprawdzenia błędu wygląda tak:

$x = mysqli_query($conn, "SELECT * FROM mieszkancy");
if (!$x) echo "Błąd wykonania zapytania";

Komunikat „Błąd wykonania zapytania" pojawi się, gdy $x ma wartość false — czyli zapytanie się nie powiodło. To częsta forma pytania CKE.

Stara funkcja mysql_query vs nowa mysqli_query

W starszych materiałach widać mysql_query, mysql_connect itd. — to przestarzała biblioteka, usunięta z PHP od wersji 7.0. Obecnie używa się:

  • MySQLi (mysqli_query, mysqli_connect, mysqli_close) — proceduralna i obiektowa,
  • PDO (PDO, PDOStatement) — uniwersalna, obsługuje wiele typów baz.

Na egzaminie jednak mysql_query wciąż występuje w pytaniach historycznych — logika działania jest taka sama, tylko nazwy funkcji.

Sprawdzanie błędu połączenia

Po mysqli_connect() warto sprawdzić, czy połączenie się udało:

$a = mysqli_connect('localhost', 'adam', 'mojeHaslo');
if (!$a) echo "Brak połączenia z serwerem bazy danych";

Gdy zmienna $a ma wartość false (!$a jest prawdą), wyświetla się komunikat o braku połączenia z serwerem. To częsty wzorzec — w pytaniach CKE pojawia się fragment kodu z if (!$a) echo "..." i trzeba uzupełnić treść komunikatu.

Pobieranie wyników — mysqli_fetch_*

Wynik zapytania SELECT to zbiór wierszy. Aby je pobrać, używa się funkcji mysqli_fetch_*:

  • mysqli_fetch_assoc($result) — zwraca wiersz jako tablicę asocjacyjną ($row["nazwa"]),
  • mysqli_fetch_row($result) — zwraca wiersz jako tablicę indeksowaną ($row[0]),
  • mysqli_fetch_array($result) — zwraca jedno i drugie naraz,
  • mysqli_fetch_object($result) — zwraca wiersz jako obiekt ($row->nazwa).

Aby wyświetlić wszystkie rezultaty zapytania, używa się pętli:

while ($row = mysqli_fetch_assoc($result)) {
    echo $row["nazwa"] . "<br>";
}

Pętla while wykonuje się dopóki funkcja zwraca kolejny wiersz. Gdy wierszy zabraknie, zwraca null i pętla się kończy.

Więcej w hasłach mysqli_fetch_row, mysqli_num_rows.

Zamknięcie połączenia — mysqli_close

Po zakończeniu pracy z bazą należy zamknąć połączenie, aby nie zużywać niepotrzebnie zasobów serwera:

mysqli_close($conn);

W PHP, aby poprawnie zakończyć połączenie z bazą danych MySQL, ostatnim krokiem powinno być użycie polecenia mysqli_close(). To kolejne typowe pytanie egzaminacyjne.

Analogicznie dla PostgreSQL: pg_close($conn).

Więcej w haśle mysqli_close.

Frameworki PHP i systemy CMS

Aplikacje komunikujące się z bazą SQL pisze się rzadko od zera — częściej używa się frameworków i systemów CMS.

Co wchodzi w skład frameworka?

Typowy framework programistyczny (np. Laravel, Symfony, CodeIgniter) zawiera:

  • biblioteki funkcji i klas pomocniczych,
  • gotowe komponenty (logowanie, formularze, walidacja),
  • wzorce projektowe (najczęściej MVC — Model-View-Controller),
  • mechanizmy ORM do obsługi baz danych,
  • system rutingu (mapowanie URL na akcje),
  • system szablonów do renderowania widoków,
  • narzędzia CLI do automatyzacji zadań.

CMS Joomla — wymagania środowiska

System CMS Joomla! to gotowa aplikacja webowa napisana w PHP, korzystająca z bazy SQL. Aby ją zainstalować, potrzebne jest środowisko zawierające:

  • serwer WWW (Apache, Nginx),
  • interpreter PHP (zalecana aktualna wersja),
  • bazę danych SQL (MySQL lub MariaDB, ewentualnie PostgreSQL).

To popularnie nazywane środowisko LAMP (Linux + Apache + MySQL + PHP) lub WAMP/XAMPP na Windowsie.

Funkcje napisane w PHP

Funkcja w PHP to wydzielony fragment kodu, który można wywoływać wielokrotnie z różnymi argumentami. Funkcja użytkownika służy m.in. do:

  • wykonywania operacji obliczeniowych,
  • przetwarzania danych (formatowanie, walidacja),
  • operacji na bazie danych (np. funkcja pobierzProdukt($id)),
  • enkapsulacji logiki — żeby nie powtarzać kodu.

Tworzy się ją słowem kluczowym function:

function powitaj($imie) {
    return "Witaj, $imie!";
}

echo powitaj("Anna"); // Witaj, Anna!

Więcej w haśle funkcje w PHP.

Najczęstsze błędy egzaminacyjne

Typowe pułapki w pytaniach o komunikację z bazą SQL:

  • ustawienie wyboru bazy przed połączeniem z serwerem — logicznie niemożliwe,
  • próba wykonania zapytania bez wcześniejszego połączenia,
  • mylenie pg_connect z MySQLpg_connect to PostgreSQL,
  • mylenie mysqli_query() z mysqli_fetch_*() — pierwsza wysyła zapytanie, druga pobiera wiersz,
  • brak zamknięcia połączenia lub umieszczenie mysqli_close() przed pobraniem wyników.

Częste pomyłki — nie myl tego!

  • mysqli_*mysql_*mysql_* to przestarzała biblioteka (usunięta z PHP 7+), mysqli_* to jej następczyni.
  • mysqli_*pg_*mysqli_* to MySQL/MariaDB, pg_* to PostgreSQL.
  • mysqli_query nie zwraca danych bezpośrednio — zwraca obiekt wyniku, z którego trzeba pobrać wiersze przez mysqli_fetch_*.
  • mysqli_close() to ostatni krok, nie pierwszy — łatwa pułapka w pytaniach o kolejność.
  • CMS Joomla wymaga PHP + bazy danych + serwera WWW — nie wystarczy sam PHP ani sama baza.
  • Framework to nie CMS — framework to biblioteka narzędzi (np. Laravel), CMS to gotowa aplikacja (np. Joomla, WordPress).
  • if (!$x) to sprawdzenie błędu — gdy zmienna $x jest false (np. po nieudanym zapytaniu), warunek jest prawdziwy.

Najważniejsze do zapamiętania

Aplikacja webowa komunikuje się z bazą SQL w stałej kolejności: połączenie → wybór bazy → zapytanie → pobranie wyników → zamknięcie połączenia. W PHP do MySQL używa się funkcji mysqli_* (połączenie: mysqli_connect, zapytanie: mysqli_query, pobranie: mysqli_fetch_assoc, zamknięcie: mysqli_close). Do PostgreSQL — funkcji pg_* (np. pg_connect). Sprawdzenie błędu robi się przez if (!$conn) echo "...". Frameworki dostarczają biblioteki i wzorce (najczęściej MVC), CMS typu Joomla to gotowa aplikacja wymagająca PHP + serwera WWW + bazy SQL.