mysqli_commit în PHP

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

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

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_commit după 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).