mysqli_rollback în PHP

Anulează toate modificările făcute în tranzacția curentă.

Sintaxă
mysqli_rollback(mysqli $mysql, int $flags = 0, ?string $name = null): bool

Ce face mysqli_rollback

mysqli_rollback readuce datele la starea de dinaintea lui mysqli_begin_transaction. Se apelează de obicei în blocul catch, când una dintre operațiile tranzacției a eșuat.

Atenție: parametrul $name nu înseamnă revenire la un punct de salvare; este doar un comentariu. Pentru revenirea la un punct creat cu mysqli_savepoint rulează ROLLBACK TO SAVEPOINT nume cu mysqli_query.

Exemplele de pe această pagină folosesc baza de date magazin, cu tabelul produse (coloanele id INT AUTO_INCREMENT, nume VARCHAR(100) NOT NULL, pret INT și stoc INT) și patru rânduri: Laptop (3200 lei, 5 buc.), Mouse (80 lei, 40 buc.), Monitor (900 lei, 0 buc.) și Tastatură (150 lei, 12 buc.). Comenzile SQL sunt explicate în secțiunea MySQL. Rezultatele au fost scrise pentru MySQL 8, pentru că exemplele au nevoie de un server de baze de date.

Parametri

Parametru Descriere
$mysql Conexiunea.
$flags Opțional. Constante MYSQLI_TRANS_COR_*.
$name Opțional. Comentariu adăugat la comanda ROLLBACK.

Ce returnează

true la succes.

Exemple

Exemplul 1: Anularea unei modificări

<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");

mysqli_begin_transaction($conn);
mysqli_query($conn, "DELETE FROM produse");
echo "În tranzacție: " . mysqli_fetch_row(mysqli_query($conn, "SELECT COUNT(*) FROM produse"))[0] . " produse\n";

mysqli_rollback($conn);
echo "După rollback: " . mysqli_fetch_row(mysqli_query($conn, "SELECT COUNT(*) FROM produse"))[0] . " produse";

Rezultat (cu un server MySQL și tabelul produse de mai sus)

În tranzacție: 0 produse
După rollback: 4 produse

Greșeli frecvente

  • Scrii mysqli_rollback($conn, 0, "punct1") ca să revii la un punct de salvare. Se anulează toată tranzacția; folosește ROLLBACK TO SAVEPOINT punct1.

Comenzi înrudite

  • mysqli_begin_transaction: Începe o tranzacție: modificările următoare se salvează toate împreună cu commit sau se anulează toate cu rollback.
  • mysqli_commit: Salvează definitiv toate modificările făcute în tranzacția curentă.
  • mysqli_savepoint: Creează un punct de salvare în tranzacția curentă, la care poți reveni fără să anulezi toată tranzacția.