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șteROLLBACK 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.