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 języku PHP, wykonując operacje na bazie danych MySQL w ramach transakcji, aby zatwierdzić wprowadzone zmiany, należy wywołać

A.
mysqli_close();
Źle. mysqli_close() zamyka połączenie, a niezatwierdzone zmiany zostaną wycofane.
B.
mysqli_rollback();
Źle. mysqli_rollback() wycofuje zmiany transakcji zamiast je zatwierdzać.
C.
mysqli_exit();
Źle. Funkcji mysqli_exit() nie ma w bibliotece MySQLi.
D.
mysqli_commit();
Dobrze. mysqli_commit() trwale zapisuje zmiany wprowadzone w transakcji.

Poprawna jest funkcja mysqli_commit(). Transakcja to grupa zapytań, które mają się wykonać w całości albo wcale, np. pobranie pieniędzy z jednego konta i dopisanie ich do drugiego. Po wywołaniu mysqli_begin_transaction($db) zmiany są tymczasowe, a dopiero mysqli_commit($db) zapisuje je trwale w bazie.

Do zapamiętania: domyślnie MySQL działa w trybie autocommit, w którym każde zapytanie jest od razu zatwierdzane. Transakcje działają w silniku InnoDB. W kodzie typowy schemat to: rozpoczęcie transakcji, kilka zapytań, a potem commit, gdy wszystko się udało, lub rollback, gdy wystąpił błąd. To realizacja zasady atomowości z ACID.

Zatwierdzonej transakcji nie da się już wycofać funkcją rollback.

Najczęściej myli się tu zatwierdzenie z wycofaniem. mysqli_rollback() też kończy transakcję, ale w odwrotny sposób: odrzuca wszystkie zmiany wprowadzone od jej początku i przywraca dane do stanu sprzed transakcji. Używa się jej, gdy któreś zapytanie się nie powiodło.

mysqli_close() zamyka połączenie z serwerem - jeśli zrobi się to w trakcie transakcji bez zatwierdzenia, MySQL wycofa niezatwierdzone zmiany, więc efekt jest odwrotny do zamierzonego. mysqli_exit() w ogóle nie istnieje w bibliotece MySQLi, a jej wywołanie zakończy skrypt błędem krytycznym. Łatwo zapamiętać pary z nazw: commit to „zatwierdź”, rollback - „cofnij”, a close - „zamknij połączenie”.

W wersji obiektowej MySQLi odpowiadają im metody $db->commit() i $db->rollback(). W kodzie zatwierdzenie umieszcza się zwykle po ostatnim udanym zapytaniu, a wycofanie w bloku obsługi błędu, np. w catch.

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.