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);

mysqli.phpphp
<?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');
  1. Argumenty konstruktora muszą trafić w odpowiedniej kolejności: adres, konto, hasło, nazwa bazy, port. Wartości czytamy z tablicy konfiguracja.
  2. -> oznacza dostęp do elementu obiektu. set_charset jest metodą, czyli funkcją tego obiektu; wywołujesz ją przez nawiasy.
  3. utf8mb4 jest nazwą kodowania obsługującego m.in. polskie znaki i emoji; nie zapisuj w nazwie spacji.
  4. 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

ZapisZnaczeniePrzykł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.

Ta interakcja wymaga włączonego JavaScriptu.

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

src/db.phpphp
<?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

src/config.example.phpphp
<?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.

Oczekiwany rezultat
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ć

  1. Połączysz PHP8.3 z MariaDB przez mysqli i ustawisz poprawne kodowanie bez ujawniania danych dostępowych.
  2. Potrafisz wskazać w kodzie przyczynę wyniku i zaplanować próbę błędnych danych.
  3. 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ę →
Źródła i dalsza nauka