Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych PHP

W aplikacji PHP przesłano do bazy kwerendę SELECT za pomocą funkcji mysqli_query. Którą funkcję powinien zastosować użytkownik, aby sprawdzić, ile rekordów zwróciło zapytanie?

A. mysqli_fetch_row
B. mysqli_connect
C. mysqli_num_rows
D. mysqli_query

Pytanie z egzaminu CKE, czerwiec 2023 (arkusz EE.09-SG-23.06).

mysqli_num_rows to właściwa funkcja, bo jej zadaniem jest zwrócenie liczby wierszy znajdujących się w wyniku zapytania SELECT wykonanego przez mysqli_query. W typowym schemacie pracy najpierw łączysz się z bazą przez mysqli_connect, potem wykonujesz zapytanie funkcją mysqli_query, a otrzymany wynik, czyli obiekt mysqli_result, przekazujesz do mysqli_num_rows. Przykładowo: $wynik = mysqli_query($polaczenie, $sql); $ile = mysqli_num_rows($wynik);. Dzięki temu możesz sprawdzić, czy baza zwróciła jakieś rekordy, np. przed wyświetleniem tabeli z użytkownikami albo komunikatu typu brak wyników wyszukiwania. Moim zdaniem to jedna z tych funkcji, które warto znać na pamięć, bo pojawia się w prawie każdej prostej aplikacji PHP korzystającej z MySQL. Dobrą praktyką jest też wcześniejsze sprawdzenie, czy mysqli_query nie zwróciło false, bo wtedy zapytanie się nie wykonało i liczenie rekordów nie ma sensu. W kodzie produkcyjnym warto dodatkowo stosować prepared statements, szczególnie gdy dane pochodzą od użytkownika, oraz zwalniać wynik przez mysqli_free_result, jeśli operujemy na większych zbiorach danych.
W tym pytaniu chodzi o rozróżnienie funkcji, które wykonują różne etapy pracy z bazą danych. Samo mysqli_fetch_row nie służy do sprawdzania liczby rekordów. Ta funkcja pobiera pojedynczy wiersz z wyniku zapytania i zwraca go jako tablicę indeksowaną numerycznie. Przy okazji przesuwa wewnętrzny wskaźnik wyniku na następny rekord, więc używa się jej raczej w pętli, gdy chcemy odczytać dane, np. nazwę produktu, cenę albo login użytkownika. Typowy błąd polega na myleniu pobierania rekordu z liczeniem rekordów. Da się oczywiście zliczać wiersze ręcznie, pobierając je jeden po drugim, ale to jest mniej czytelne i zwykle niepotrzebne, gdy istnieje gotowa funkcja mysqli_num_rows. Funkcja mysqli_query również nie rozwiązuje problemu, bo ona wysyła zapytanie SQL do serwera bazy danych. Dla zapytania SELECT zwraca wynik, na którym dopiero potem można wykonać dalsze operacje, takie jak pobieranie wierszy albo sprawdzenie ich liczby. Z mojego doświadczenia uczniowie czasem wybierają ją, bo w treści pytania pojawia się zapytanie SELECT, ale to tylko etap wykonania kwerendy, nie analiza wyniku. mysqli_connect ma jeszcze inne zadanie: tworzy połączenie z serwerem MySQL. Bez połączenia nie wykonamy zapytania, ale samo połączenie nie mówi nic o liczbie rekordów. Poprawne myślenie jest takie: połącz się z bazą, wykonaj zapytanie, sprawdź wynik i dopiero potem go przetwarzaj. Właśnie do sprawdzenia liczby zwróconych wierszy służy mysqli_num_rows.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.