mysqli_autocommit în PHP

Pornește sau oprește salvarea automată a fiecărei interogări (modul autocommit).

Sintaxă
mysqli_autocommit(mysqli $mysql, bool $enable): bool

Ce face mysqli_autocommit

Implicit, MySQL rulează în modul autocommit: fiecare INSERT, UPDATE sau DELETE se salvează imediat. Cu mysqli_autocommit($conn, false), modificările se adună până la mysqli_commit sau mysqli_rollback, ca într-o tranzacție continuă.

Pentru o tranzacție punctuală este mai clar mysqli_begin_transaction, care nu schimbă modul conexiunii.

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.
$enable true pornește salvarea automată, false o oprește.

Ce returnează

true la succes.

Exemple

Exemplul 1: Oprirea salvării automate

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

mysqli_autocommit($conn, false);
echo "autocommit = " . mysqli_fetch_row(mysqli_query($conn, "SELECT @@autocommit"))[0] . "\n";

mysqli_query($conn, "UPDATE produse SET pret = pret + 10");
mysqli_rollback($conn);
echo "Preț Mouse: " . mysqli_fetch_row(mysqli_query($conn, "SELECT pret FROM produse WHERE id = 2"))[0] . "\n";

mysqli_autocommit($conn, true);

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

autocommit = 0
Preț Mouse: 80

Greșeli frecvente

  • Oprești autocommit și uiți de el. Toate modificările scriptului se pierd la final, pentru că nu a existat niciun commit.

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_rollback: Anulează toate modificările făcute în tranzacția curentă.