INF.03 · Aplikacje internetowe PHP
Połączenie PHP z bazą danych (mysqli)
Most między PHP a bazą.
- PHP8.3
- mysqli · MariaDB
- Praktyka i diagnoza
Po tej lekcji: Połączysz PHP 8.3 z MariaDB przez mysqli i ustawisz poprawne kodowanie bez ujawniania danych dostępowych.
Zrozum mechanizm
Przeglądarka nie łączy się bezpośrednio z bazą. Robi to skrypt PHP przez bibliotekę mysqli. Potrzebuje hosta, portu, nazwy bazy i osobnego konta z minimalnymi prawami. Root i puste hasło nie są wzorcem aplikacji. W paczce konto pracujące ma wyłącznie SELECT/INSERT/UPDATE/DELETE do bazy ćwiczeniowej.
Włącz raportowanie wyjątków przez mysqli_report i ustaw utf 8 mb 4 przez set_charset. new mysqli() przy błędzie może zgłosić wyjątek — samo if(!$polaczenie) nie jest wystarczającą obsługą współczesnego mysqli. Odwiedzający dostaje ogólny komunikat, a diagnozę prowadzisz lokalnie w logu. Plik konfiguracji jest poza public i poza oddawanym ZIP-em.
Jak uruchamiać krótkie przykłady?
Każdy krótki przykład oznaczony własnym plikiem uruchamiaj osobno, nie doklejaj wszystkich definicji do jednego pliku. W edytorze zapisz go jako .php, a w terminalu tego folderu wpisz np. php for.php. Wtedy pokazane końce wierszy PHP_EOL są widoczne. W odpowiedzi HTML znak końca wiersza sam nie robi nowej linii na ekranie: użyj <br> albo znacznika <pre>. Wyświetl źródło pozwala zobaczyć tekst odpowiedzi.
Przykłady opisane jako fragment projektu wymagają paczki KINO / LAB i wcześniejszej konfiguracji. Nie uruchamiaj ich jako samodzielnych endpointów. Pełny plik niżej pokazuje kontekst. Funkcje h(), pole() i wymagajPost() są nasze; ich definicje wczytuje bootstrap.php.
Połączenie: obiekt mysqli i wywołanie metody
new tworzy obiekt połączenia. Nie przepisuj nazwy konta ani hasła kolegi: parametry pochodzą z własnej lokalnej konfiguracji. Poniższy fragment zapisz w katalogu głównym paczki, a uruchamiaj dopiero w skonfigurowanym projekcie KINO / LAB.
Podstawowa forma: $polaczenie = new mysqli(host, uzytkownik, haslo, baza, port);
<?php
require_once __DIR__ . '/src/bootstrap.php';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$polaczenie = new mysqli(
$konfiguracja['host'],
$konfiguracja['user'],
$konfiguracja['password'],
$konfiguracja['database'],
$konfiguracja['port']
);
$polaczenie->set_charset('utf8mb4');
- Argumenty konstruktora muszą trafić w odpowiedniej kolejności: adres, konto, hasło, nazwa bazy, port. Wartości czytamy z tablicy konfiguracja.
-
->oznacza dostęp do elementu obiektu. set_charset jest metodą, czyli funkcją tego obiektu; wywołujesz ją przez nawiasy. - utf8mb4 jest nazwą kodowania obsługującego m.in. polskie znaki i emoji; nie zapisuj w nazwie spacji.
- mysqli_report włącza zgłaszanie błędów jako wyjątków. Znak
|łączy flagi ustawień; nie jest logicznym||. Pełny projekt obsługuje wyjątek w bootstrap i nie pokazuje hasła ani SQL użytkownikowi.
Jak czytać pozostałe zapisy w pełnym przykładzie
| Zapis | Znaczenie | Przykład użycia |
|---|---|---|
-> oraz :: | -> wybiera właściwość lub metodę obiektu; :: odnosi się do elementu statycznego klasy. To nie jest zapis dostępu do tablicy. | $zapytanie->execute(); |
Sprawdź w działaniu
Most między PHP a bazą — sprawdź w modelu
Model w przeglądarce wyjaśnia mechanizm na fikcyjnych danych. Nie wykonuje PHP ani zapytań SQL i nie tworzy kont. Prawdziwe skrypty uruchomisz lokalnie z paczki.
Przewidź rezultat, wykonaj próbę i wyjaśnij, która decyzja po stronie serwera decyduje o wyniku.
Uruchom krok po kroku
Zaimportuj schema.sql do lokalnej MariaDB 11.4 przez phpMyAdmin. Skopiuj config.example.php do config.local.php, wpisz lokalne dane oraz sprawdź port. Uruchom index.php. W logu diagnozuj osobno: brak usługi, zły port, błędne konto i niezaimportowaną tabelę. Nie wklejaj danych dostępowych na BitEdu.
Plik wzorcowy: src/db.php
<?php
declare(strict_types=1);
require_once __DIR__.'/bootstrap.php';
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$polaczenie = new mysqli(
$konfiguracja['host'], $konfiguracja['user'], $konfiguracja['password'],
$konfiguracja['database'], $konfiguracja['port']
);
$polaczenie->set_charset('utf8mb4');
Konfiguracja poza public
<?php
// Skopiuj do config.local.php i wpisz WYŁĄCZNIE lokalne dane pracowni.
// To konto ma prawa SELECT, INSERT, UPDATE, DELETE do serwis_filmowy, nie root.
return [
'host' => '127.0.0.1', 'port' => 3306,
'user' => 'uczen_php', 'password' => 'TU_WPISZ_LOKALNE_HASLO',
'database' => 'serwis_filmowy', 'https' => false,
];
Pobierz i odtwórz projekt
W „Źródłach i materiałach” na końcu pobierz KINO / LAB.zip. Rozpakuj całość; instrukcja START.txt opisuje konfigurację. Pierwsze 6 przykładów w public/podstawy działa bez bazy. Dalsze wymagają lokalnej MariaDB 11.4, importu schema.sql i lokalnego konta bazy z minimalnymi prawami. Gotowa paczka pokazuje całość, ale w tej lekcji wykonaj opisane kroki i własne zadanie.
Ćwiczenie z pomocą · samodzielna praca
Twoja próba — podpowiedzi otwieraj po kolei
Uruchom katalog z trzema filmami i sprawdź poprawne polskie znaki. W kopii konfiguracji wpisz błędny port, rozpoznaj błąd i przywróć poprawny.
Katalog działa; błędne połączenie nie ujawnia hasła ani surowego błędu SQL w HTML.
? Potrzebujesz pomocy? Rozwiązuj krok po kroku.
Krok 1 — pokaż podpowiedź
Odszukaj wskazany plik i zapisz przewidywany rezultat przed zmianą.
Krok 2 — pokaż podpowiedź
Zmień jedną rzecz. Sprawdź metodę żądania, dane i odpowiedź lub wynik programu.
Krok 3 — pokaż podpowiedź
Wykonaj próbę graniczną lub błędną. Porównaj także stan bazy lub sesji, nie tylko komunikat.
Otwórz tylko tyle podpowiedzi, ile potrzebujesz. Po każdym kroku wróć do zadania i sprawdź wynik.
Podsumowanie
Co warto zapamiętać
- Połączysz PHP8.3 z MariaDB przez mysqli i ustawisz poprawne kodowanie bez ujawniania danych dostępowych.
- Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
- Nie oddajesz haseł, pliku config.local.php ani wartości cookie.
Dalej na swoim koncie
Rozgrzewki, quiz i zadania są w biurku ucznia.
Teoria jest otwarta dla wszystkich. Żeby rozwiązywać zadania, zapisywać szkice i widzieć swój postęp, zaloguj się.
Zaloguj się →