W języku PHP, wykonując operacje na bazie danych MySQL w ramach transakcji, aby zatwierdzić wprowadzone zmiany, należy wywołać
mysqli_close();
mysqli_rollback();
mysqli_exit();
mysqli_commit();
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.