KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 8.
W kodzie PHP wykonano przedstawioną operację na bazie danych. Której funkcji należy użyć, aby pobrać liczbę zmienionych w tabeli wierszy?
Ilustracja przedstawia fragment kodu PHP, który wykonuje operację na bazie danych.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawna jest funkcja mysqli_affected_rows(), ponieważ zwraca liczbę wierszy dotkniętych przez ostatnie zapytanie modyfikujące dane (np. INSERT, UPDATE, DELETE). Pozostałe funkcje dotyczą pobierania wyniku, liczby pól w wyniku lub liczenia wierszy w zestawie wynikowym SELECT, a nie liczby zmienionych rekordów.

Pełne wyjaśnienie:

Funkcja mysqli_affected_rows() służy do ustalenia, ile rekordów zostało dotkniętych przez ostatnie zapytanie wykonane na danym połączeniu. W praktyce wykorzystuje się ją po operacjach modyfikujących dane, takich jak INSERT, UPDATE czy DELETE, aby potwierdzić efekt działania polecenia i poprawnie zbudować logikę aplikacji (komunikaty, logi, warunki biznesowe).

Odpowiedź mysqli_num_rows() bywa mylona z właściwą, ponieważ również "liczy wiersze", ale dotyczy liczby rekordów w wyniku zapytania (zwykle SELECT) reprezentowanym przez obiekt result. Nie mówi więc, ile wierszy zmieniono w tabeli, tylko ile zwrócono w rezultacie.

mysqli_field_count() zwraca liczbę kolumn (pól) w zestawie wynikowym ostatniego zapytania. To informacja o strukturze wyniku, a nie o liczbie rekordów ani o liczbie zmian w tabeli.

mysqli_use_result() nie jest funkcją liczącą; służy do pobrania niebuforowanego wyniku zapytania z serwera. Jej użycie wiąże się z innym sposobem przetwarzania danych (strumieniowo), ale nie odpowiada na pytanie o liczbę zmienionych wierszy.

Wskazówka egzaminacyjna: gdy w treści pojawia się "zmieniono/usunięto/dodano rekordy", myśl o affected rows; gdy mowa o "ile rekordów zwrócił SELECT", myśl o num_rows.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zwraca liczbę wierszy dotkniętych przez ostatnie zapytanie wykonane na danym połączeniu mysqli, zwykle po INSERT/UPDATE/DELETE. Dzięki temu możesz sprawdzić, czy operacja rzeczywiście zmieniła dane (np. czy UPDATE zmienił 0 czy więcej rekordów).
Po wykonaniu zapytania UPDATE użyj mysqli_affected_rows() dla tego samego połączenia. Wynik pozwala odróżnić sytuację, gdy zapytanie wykonało się poprawnie, ale nie dopasowało żadnych wierszy lub nie wprowadziło zmian.
mysqli_num_rows() dotyczy liczby wierszy w zestawie wynikowym (najczęściej po SELECT) i wymaga obiektu wyniku. Zapytania modyfikujące dane zwykle nie zwracają takiego zestawu, więc do zmian w tabeli stosuje się mysqli_affected_rows().
Używa się jej po zapytaniach zwracających rekordy, np. SELECT, aby ustalić ile wierszy znajduje się w wyniku. To przydatne przy paginacji, sprawdzaniu, czy użytkownik istnieje, lub ocenie, czy zapytanie zwróciło jakiekolwiek dane.
Może oznaczać, że żaden wiersz nie został dopasowany przez warunek WHERE albo że rekordy były dopasowane, ale wartości po UPDATE pozostały takie same (brak realnej zmiany). W interpretacji zawsze uwzględnij typ zapytania i logikę aplikacji.
Tak, jest typowo używana po INSERT/DELETE/UPDATE. Po INSERT zwraca liczbę dodanych wierszy, a po DELETE liczbę usuniętych. To prosty sposób na weryfikację efektu operacji bez dodatkowego SELECT.
Częsta pomyłka wynika z tego, że obie wartości "liczą wiersze", ale w innym sensie. affected_rows dotyczy skutku modyfikacji danych w tabeli, a num_rows dotyczy liczby rekordów zwróconych w wyniku SELECT.
Nie. mysqli_field_count() informuje o liczbie kolumn w zestawie wynikowym ostatniego zapytania. To parametr opisujący strukturę danych, a nie liczbę rekordów ani skalę zmian dokonanych w tabeli.
Stosuje się ją, gdy chcesz przetwarzać wynik zapytania bez buforowania całości w pamięci (tryb niebuforowany). Ma znaczenie przy dużych wynikach SELECT. Nie służy jednak do ustalania liczby zmodyfikowanych wierszy.
Ucz się funkcji w grupach: wykonanie zapytania, pobieranie wyników, metadane wyniku oraz informacje o skutkach operacji DML. Ćwicz na krótkich przykładach: SELECT → num_rows, INSERT/UPDATE/DELETE → affected_rows, a także rozpoznawaj, kiedy w ogóle powstaje obiekt wyniku.
info

To pytanie poprawnie rozwiązuje 41% zdających egzamin. trudne

Eksperci podkreślają: "Poprawna jest funkcja mysqli_affected_rows(), ponieważ zwraca liczbę wierszy dotkniętych przez ostatnie zapytanie modyfikujące dane (np. INSERT, UPDATE, DELETE)."

Źródła:

  • PHP Manual: mysqli_affected_rows — https://www.php.net/manual/en/mysqli.affected-rows.php (dostęp: 2026-03-02)
  • PHP Manual: mysqli_num_rows — https://www.php.net/manual/en/mysqli-result.num-rows.php (dostęp: 2026-03-02)
  • PHP Manual: mysqli_field_count — https://www.php.net/manual/en/mysqli.field-count.php (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja PHP: rozszerzenie mysqli (funkcje proceduralne i metody obiektowe)
  • Ćwiczenia SQL: różnice SELECT vs INSERT/UPDATE/DELETE na przykładowej tabeli
  • Materiały do INF.3 z części dotyczącej komunikacji PHP z MySQL oraz obsługi wyników zapytań

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego