W budowie
Połączenie z MySQL, zapytania SELECT i prezentacja w HTML

Część 11 · SQL: odczyt danych — kurs PHP INF.03

Część 11 kursu PHP pod kątem INF.03: SQL: odczyt danych. Teoria w skrócie i 16 ćwiczeń z automatycznym sprawdzaniem.

  • 45 min
  • 16 slajdów
  • Notatki nauczyciela: N
  • Strona modułu: otwórz
Plan · 45 min

Co dziś robimy

  1. 12 minPołączenie z bazą przez mysqli Połączenie warto sprawdzić: if (!$polaczenie) pozwala zatrzymać skrypt i pokazać…
  2. 12 minSELECT i odczyt wyników Pętlę while z tym warunkiem stosuje się dlatego, że nie wiemy z góry, ile jest rekordów.
  3. 12 minObsługa błędów zapytań Do diagnostyki służy mysqli_error($polaczenie) , ale komunikat pokazujemy tylko w…
  4. 4 minĆwiczenia 16 zadań w module — wybierz 3–4 na lekcję
  5. 5 minPodsumowanie bilet wyjściowy i zadanie domowe
Atom 1 z 4 · ~12 min

Połączenie z bazą przez mysqli

Do bazy łączymy się funkcją mysqli_connect() , podając host, użytkownika, hasło i nazwę bazy. Wynik zapisujemy w zmiennej — to uchwyt połączenia, którego używamy przy każdym zapytaniu.

  • Połączenie warto sprawdzić: if (!$polaczenie) pozwala zatrzymać skrypt i pokazać komunikat.
  • W środowisku produkcyjnym nie pokazujemy jednak szczegółów błędu użytkownikowi.
  • Kodowanie ustalamy przez mysqli_set_charset($polaczenie, 'utf8mb4') .
  • Bez tego polskie znaki mogą zamienić się w znaki zapytania.
Kod · atom 1 · ~3 min

Jak to wygląda w kodzie

$polaczenie = mysqli_connect('localhost', 'root', '', 'szkola');

if (!$polaczenie) {
    exit('Brak polaczenia z baza');
}

mysqli_set_charset($polaczenie, 'utf8mb4');
echo 'Polaczono z baza szkola';
Przykład na żywo · atom 1 · ~3 min

Uruchom i pokaż

$polaczenie = mysqli_connect('localhost', 'root', '', 'szkola');

if (!$polaczenie) {
    exit('Brak polaczenia z baza');
}

mysqli_set_charset($polaczenie, 'utf8mb4');
echo 'Polaczono z baza szkola';
Sprawdzenie · atom 1 · ~2 min

Pytanie do klasy

Co zwraca mysqli_connect()?

Atom 2 z 4 · ~12 min

SELECT i odczyt wyników

Zapytanie SELECT pobiera dane. Wysyłamy je przez mysqli_query() , a wynik odczytujemy wiersz po wierszu funkcją mysqli_fetch_assoc() — zwraca ona tablicę asocjacyjną albo null , gdy wierszy już nie ma.

  • Pętlę while z tym warunkiem stosuje się dlatego, że nie wiemy z góry, ile jest rekordów.
  • Każdy wiersz zawiera kolumny pod nazwami z zapytania.
  • Gdy potrzebny jest tylko jeden wiersz, wystarczy jedno wywołanie mysqli_fetch_assoc() bez pętli.
  • Do liczby wierszy służy mysqli_num_rows() .
Kod · atom 2 · ~3 min

Jak to wygląda w kodzie

$wynik = mysqli_query($polaczenie, 'SELECT imie, klasa FROM uczniowie ORDER BY imie');

while ($wiersz = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($wiersz['imie'])
        . ' - ' . htmlspecialchars($wiersz['klasa']) . '</p>';
}

echo '<p>Razem: ' . mysqli_num_rows($wynik) . '</p>';
Przykład na żywo · atom 2 · ~3 min

Uruchom i pokaż

$wynik = mysqli_query($polaczenie, 'SELECT imie, klasa FROM uczniowie ORDER BY imie');

while ($wiersz = mysqli_fetch_assoc($wynik)) {
    echo '<p>' . htmlspecialchars($wiersz['imie'])
        . ' - ' . htmlspecialchars($wiersz['klasa']) . '</p>';
}

echo '<p>Razem: ' . mysqli_num_rows($wynik) . '</p>';
Sprawdzenie · atom 2 · ~2 min

Pytanie do klasy

Co zwraca mysqli_fetch_assoc()?

Atom 3 z 4 · ~12 min

Obsługa błędów zapytań

Zapytanie może się nie udać z powodu literówki, braku tabeli albo braku uprawnień. mysqli_query() zwraca wtedy false , więc warto sprawdzić wynik, zanim użyjemy go dalej.

  • Do diagnostyki służy mysqli_error($polaczenie) , ale komunikat pokazujemy tylko w środowisku testowym.
  • Użytkownik nie powinien widzieć struktury bazy.
  • W kodzie egzaminacyjnym wystarczy warunek i czytelny komunikat.
  • W większych aplikacjach używa się wyjątków i klasy mysqli w stylu obiektowym.
Kod · atom 3 · ~3 min

Jak to wygląda w kodzie

$sql = 'SELECT imie FROM uczniowie';
$wynik = mysqli_query($polaczenie, $sql);

if ($wynik === false) {
    echo 'Nie udalo sie pobrac danych';
} else {
    echo 'Wierszy: ' . mysqli_num_rows($wynik);
}

mysqli_close($polaczenie);
Przykład na żywo · atom 3 · ~3 min

Uruchom i pokaż

$sql = 'SELECT imie FROM uczniowie';
$wynik = mysqli_query($polaczenie, $sql);

if ($wynik === false) {
    echo 'Nie udalo sie pobrac danych';
} else {
    echo 'Wierszy: ' . mysqli_num_rows($wynik);
}

mysqli_close($polaczenie);
Sprawdzenie · atom 3 · ~2 min

Pytanie do klasy

Co zwraca nieudane zapytanie?

Zamknięcie · ~3 min

Co zabrać z lekcji

  • Połączenie warto sprawdzić: if (!$polaczenie) pozwala zatrzymać skrypt i pokazać komunikat.
  • Pętlę while z tym warunkiem stosuje się dlatego, że nie wiemy z góry, ile jest rekordów.
  • Do diagnostyki służy mysqli_error($polaczenie) , ale komunikat pokazujemy tylko w środowisku testowym.
  • Ćwiczenia
Bilet wyjściowy: Czy pokazywać błąd użytkownikowi?
Odpowiedź: d) Nie, tylko ogólnie
Hyżyk· Część 11 · SQL: odczyt danych — kurs PHP INF.03 moduł 1 / 1