Ce face mysqli_commit
După mysqli_commit, modificările din tranzacție devin permanente și vizibile pentru celelalte conexiuni. Până atunci, doar conexiunea ta le vede. Dacă scriptul se termină fără commit, MySQL anulează tranzacția.
Opțiunile MYSQLI_TRANS_COR_AND_CHAIN (începe imediat o tranzacție nouă) și MYSQLI_TRANS_COR_RELEASE (închide conexiunea după commit) sunt rar folosite. $name este doar un comentariu.
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 COMMIT. |
Ce returnează
true la succes.
Exemple
Exemplul 1: Modificările devin vizibile după commit
$alta este o a doua conexiune, ca a unui alt vizitator.
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
$alta = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
mysqli_begin_transaction($conn);
mysqli_query($conn, "UPDATE produse SET stoc = 20 WHERE id = 3");
echo "Înainte de commit, alt vizitator vede stocul: " . mysqli_fetch_row(mysqli_query($alta, "SELECT stoc FROM produse WHERE id = 3"))[0] . "\n";
mysqli_commit($conn);
echo "După commit: " . mysqli_fetch_row(mysqli_query($alta, "SELECT stoc FROM produse WHERE id = 3"))[0];
Rezultat (cu un server MySQL și tabelul produse de mai sus)
Înainte de commit, alt vizitator vede stocul: 0
După commit: 20
Greșeli frecvente
- Uiți
mysqli_commitdupămysqli_begin_transaction. Pagina pare să funcționeze, dar la sfârșitul scriptului toate modificările sunt anulate.
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_rollback: Anulează toate modificările făcute în tranzacția curentă.mysqli_autocommit: Pornește sau oprește salvarea automată a fiecărei interogări (modul autocommit).