KWALIFIKACJA INF3 - CZERWIEC 2021

PYTANIE NR 25.
Pole insert_id zdefiniowane w bibliotece MySQLi języka PHP może być wykorzystane do
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W MySQLi insert_id służy do uzyskania identyfikatora (wartości AUTO_INCREMENT) rekordu dodanego przez ostatnie zapytanie INSERT wykonane w danym połączeniu. Nie jest to mechanizm do pobierania kodów błędów ani do "wyszukiwania" wolnych indeksów w tabeli.
Dlatego poprawne jest: otrzymanie id ostatnio wstawionego wiersza.

Pełne wyjaśnienie:

W bibliotece MySQLi w PHP właściwość insert_id (np. $mysqli->insert_id) informuje o identyfikatorze wygenerowanym podczas ostatniej operacji INSERT wykonanej na danym obiekcie połączenia. W praktyce dotyczy to najczęściej kolumny klucza głównego ustawionej jako AUTO_INCREMENT. Dzięki temu po dodaniu rekordu można od razu znać jego ID i użyć go w dalszych operacjach (np. do zapisania danych w tabeli powiązanej).

Odpowiedź "otrzymania id ostatnio wstawionego wiersza." jest poprawna, bo dokładnie to jest celem insert_id: odczyt wartości ID nadanej przez bazę dla ostatniego INSERT w tym połączeniu.

Pozostałe propozycje są niepoprawne:

  • "otrzymania kodu błędu..." dotyczy innych pól/właściwości MySQLi (np. informacji o błędzie), a nie insert_id. Mieszanie tych pojęć to częsty błąd, bo oba odnoszą się do "wyniku ostatniej operacji", ale zwracają zupełnie inne dane.
  • "pobrania najwyższego indeksu bazy..." jest błędnym podejściem projektowym: aplikacja nie powinna wyznaczać kolejnego ID przez inkrementację maksimum, bo grozi to kolizjami przy równoległych zapisach. Od tego jest mechanizm AUTO_INCREMENT po stronie serwera.
  • "pobrania pierwszego wolnego indeksu..." również nie opisuje insert_id. MySQL nie gwarantuje, że aplikacja ma szukać "dziur" w numeracji; ID może mieć przerwy (np. po usunięciach), a insert_id nie służy do ich wypełniania.

Wskazówka egzaminacyjna: zapamiętaj skojarzenie: insert_id = ID po INSERT. Gdy pytanie dotyczy błędów, szukaj pojęć typu "errno", "error", "error_list", a gdy dotyczy nowego rekordu – "insert_id" lub funkcji pokrewnej zwracającej ostatnie ID.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zwraca identyfikator wygenerowany dla ostatniego zapytania INSERT w tym samym połączeniu, najczęściej wartość z kolumny AUTO_INCREMENT. Dzięki temu od razu wiesz, jakie ID ma nowo dodany rekord i możesz go użyć np. do zapisania danych powiązanych.
insert_id dotyczy wyłącznie identyfikatora po INSERT. Informacje o błędach są raportowane innymi mechanizmami (np. numer błędu i komunikat). Mylenie tych pól wynika z tego, że oba opisują "ostatnią operację", ale mają inne przeznaczenie.
Najczęściej wtedy, gdy ostatnie zapytanie nie generowało wartości AUTO_INCREMENT (np. INSERT do tabeli bez takiej kolumny) albo gdy INSERT się nie wykonał poprawnie. W praktyce zawsze warto jednocześnie sprawdzać wynik wykonania zapytania i ewentualne błędy.
Typowy schemat to: wykonujesz INSERT do tabeli nadrzędnej, odczytujesz insert_id, a następnie używasz tej wartości jako klucza obcego w kolejnym INSERT do tabeli podrzędnej. To standard w relacjach 1..n (np. użytkownik → adresy).
Tak, bo dotyczy konkretnego połączenia z bazą. Każde połączenie ma własny kontekst "ostatnio wstawionego ID". Problemem bywa dopiero błędne współdzielenie połączeń lub brak kontroli transakcji w bardziej złożonych operacjach.
insert_id to odczyt po stronie PHP/MySQLi, a LAST_INSERT_ID() to funkcja po stronie MySQL. Oba odnoszą się do ostatniego ID w danym połączeniu, ale używa się ich w innym miejscu: pierwsze w kodzie PHP, drugie w zapytaniach SQL.
Bo przy równoległych zapisach dwóch użytkowników możesz dostać tę samą wartość MAX(id) i wstawić konfliktujące dane. Mechanizm AUTO_INCREMENT i odczyt insert_id rozwiązują ten problem, bo numer jest nadawany atomowo przez bazę.
Nie służy do tego. Po UPDATE/DELETE nie jest generowane nowe AUTO_INCREMENT ID, więc insert_id nie daje tu użytecznej informacji. Do sprawdzania wpływu UPDATE/DELETE stosuje się np. liczbę zmienionych wierszy (affected rows).
Najczęściej: mylą insert_id z kodem błędu, próbują ręcznie wyznaczać "wolne" ID, albo odczytują insert_id z innego połączenia niż to, na którym wykonali INSERT. Na egzaminie szukaj skojarzenia: ID po INSERT w tym samym połączeniu.
Najpierw sprawdź wynik wykonania zapytania (np. czy metoda wykonania zwróciła sukces) i dopiero potem odczytaj insert_id. Dodatkowo warto obsłużyć sytuację, gdy insert_id wynosi 0, co może oznaczać brak AUTO_INCREMENT albo nieudaną operację.
info

Statystycznie 68% uczniów zna prawidłową odpowiedź. średnie

Według specjalistów z branży: "W MySQLi insert_id służy do uzyskania identyfikatora (wartości AUTO_INCREMENT) rekordu dodanego przez ostatnie zapytanie INSERT wykonane w danym połączeniu."

Źródła:

  • PHP Manual: mysqli::$insert_id — The ID generated by a query on a table with a column having the AUTO_INCREMENT attribute, https://www.php.net/manual/en/mysqli.insert-id.php (dostęp: 2026-03-01)
  • PHP Manual: mysqli_insert_id — Returns the auto generated id used in the last query, https://www.php.net/manual/en/function.mysqli-insert-id.php (dostęp: 2026-03-01)
  • MySQL Reference Manual: Information Functions — LAST_INSERT_ID(), https://dev.mysql.com/doc/refman/en/information-functions.html#function_last-insert-id (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja PHP: MySQLi (właściwości i funkcje)
  • Dokumentacja MySQL: LAST_INSERT_ID() i zachowanie AUTO_INCREMENT
  • Ćwiczenia praktyczne: wykonanie INSERT i odczyt insert_id w skryptach PHP

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego