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

$zapytanie="UPDATE kadra SET stanowisko='Programista' WHERE id < 10"; mysqli_query($db, $zapytanie); W kodzie PHP wykonano przedstawioną operację na...

$zapytanie="UPDATE kadra SET stanowisko='Programista' WHERE id < 10";
mysqli_query($db, $zapytanie);
W kodzie PHP wykonano przedstawioną operację na bazie danych. Której funkcji należy użyć, aby pobrać liczbę zmienionych w tabeli wierszy?
A. mysqli_num_rows()
B. mysqli_affected_rows()
C. mysqli_use_result()
D. mysqli_field_count()

Pytanie z egzaminu CKE, styczeń 2024 (arkusz EE.09-SG-24.01).

Funkcja mysqli_affected_rows() jest tutaj właściwa, bo zapytanie UPDATE nie zwraca klasycznego zestawu rekordów, tylko modyfikuje dane w tabeli. Po wykonaniu mysqli_query($db, $zapytanie) można wywołać mysqli_affected_rows($db), aby sprawdzić, ile wierszy zostało faktycznie zmienionych przez ostatnią operację na tym połączeniu z bazą. W tym przykładzie chodzi o rekordy z tabeli kadra, dla których id < 10, a kolumna stanowisko została ustawiona na wartość 'Programista'. W praktyce jest to bardzo przydatne np. po edycji profilu użytkownika, zmianie statusu zamówienia albo masowej aktualizacji danych kadrowych. Moim zdaniem warto zapamiętać prostą zasadę: dla INSERT, UPDATE i DELETE interesuje nas zwykle mysqli_affected_rows(), a dla SELECT najczęściej pobieramy wynik i ewentualnie liczymy rekordy. Dobra praktyka to sprawdzić też, czy mysqli_query() nie zwróciło false, bo wtedy mysqli_affected_rows() może zwrócić -1. Trzeba też pamiętać, że przy UPDATE funkcja domyślnie zwraca liczbę rzeczywiście zmienionych wierszy, więc jeśli rekord pasował do warunku, ale miał już stanowisko ustawione na 'Programista', może nie zostać policzony jako zmieniony. To czasem zaskakuje, ale w aplikacjach webowych jest normalne i trzeba to brać pod uwagę przy komunikatach typu „zaktualizowano dane”.
W tym kodzie wykonywana jest instrukcja UPDATE, czyli operacja modyfikująca istniejące rekordy w tabeli, a nie zapytanie wybierające dane do wyświetlenia. Dlatego nie należy myśleć o wyniku jak o tabelce zwróconej przez SELECT. Częsty błąd polega właśnie na tym, że ktoś widzi mysqli_query() i od razu kojarzy je z pobieraniem wierszy, ale tutaj wynik ma inny charakter. mysqli_field_count() służy do sprawdzania liczby kolumn w ostatnim wyniku zapytania, więc ma sens głównie przy zapytaniach, które zwracają strukturę danych, na przykład SELECT. Nie powie nam, ile rekordów zostało zmodyfikowanych. mysqli_use_result() także nie służy do liczenia zmian; ta funkcja inicjuje pobieranie niebuforowanego wyniku z serwera MySQL, co bywa używane przy dużych zestawach danych z SELECT, żeby nie ładować wszystkiego naraz do pamięci. Przy UPDATE nie ma tu czego pobierać w takim sensie. mysqli_num_rows() jest chyba najbardziej kuszące, bo nazwa sugeruje „liczbę wierszy”, ale chodzi o liczbę wierszy w obiekcie wyniku, czyli znowu typowo po SELECT. Dla UPDATE poprawnym podejściem jest użycie mysqli_affected_rows($db), bo ta funkcja odczytuje liczbę rekordów zmienionych przez ostatnią operację INSERT, UPDATE, DELETE albo podobną. Z mojego doświadczenia wynika, że najlepiej rozdzielić sobie w głowie dwie sytuacje: SELECT zwraca dane do czytania, a UPDATE zmienia stan bazy i wtedy sprawdzamy liczbę „dotkniętych” rekordów. To bardzo praktyczne przy pisaniu paneli administracyjnych i formularzy edycji danych.

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.