Jaki komunikat należy umieścić w przedstawionym fragmencie kodu PHP zamiast znaków zapytania?
$wynik = mysqli_query($polaczenie, "SELECT * FROM uczniowie WHERE klasa = '3a'"); if (mysqli_num_rows($wynik) == 0) echo "???";
A. Tabela uczniowie nie istnieje
B. Rekord został pomyślnie dodany do bazy
C. Błąd połączenia z serwerem SQL
D. Brak uczniów w klasie 3a
Poprawny komunikat to "Brak uczniów w klasie 3a". Zapytanie SQL wybiera rekordy z tabeli uczniowie tylko dla tych wierszy, w których pole klasa ma wartość '3a'. Funkcja mysqli_num_rows($wynik) zwraca liczbę wierszy otrzymanych po wykonaniu zapytania SELECT. Warunek mysqli_num_rows($wynik) == 0 oznacza więc: wynik zapytania nie zawiera żadnego rekordu. W takiej sytuacji skrypt powinien poinformować, że nie znaleziono uczniów z klasy 3a. Do zapamiętania: mysqli_num_rows() stosuje się do wyników zapytań SELECT, aby sprawdzić liczbę zwróconych wierszy. Typowa pułapka to mylenie pustego wyniku zapytania z błędem wykonania zapytania lub błędem połączenia z bazą.
Ten warunek nie sprawdza stanu połączenia ani poprawności struktury bazy, tylko liczbę rekordów zwróconych przez zapytanie SELECT. Komunikat "Błąd połączenia z serwerem SQL" byłby trafny przy nieudanym połączeniu, na przykład po błędzie funkcji mysqli_connect(), a nie przy wyniku zawierającym 0 wierszy. Komunikat "Rekord został pomyślnie dodany do bazy" dotyczy operacji INSERT, zwykle ocenianej przez powodzenie mysqli_query() albo liczbę zmienionych rekordów, a tutaj wykonywane jest tylko pobieranie danych. Komunikat "Tabela uczniowie nie istnieje" oznaczałby błąd zapytania SQL, ponieważ serwer nie mógłby odczytać wskazanej tabeli; wtedy należałoby analizować błąd zapytania, a nie wynik mysqli_num_rows(). Poprawny komunikat to "Brak uczniów w klasie 3a". Typowy błąd myślowy polega na utożsamianiu pustego zestawu wyników z awarią bazy danych. Zero wierszy może oznaczać po prostu, że nie ma danych spełniających warunek WHERE.