Používáte jej, když máte řadu příkazů SQL, které je nutné provést společně, aby byla zachována konzistence databáze. Berte zavolání commitu jako vytvoření záchranného bodu ve hře. Kdykoli zavoláte rollback, vrátíte zpět vše, co bylo provedeno do předchozího potvrzení.
Představte si situaci, kdy potřebujete uložit fakturu do tabulky faktur, podrobnosti do tabulky Detaily faktury a platby do tabulky plateb. Chcete-li zachovat konzistenci, musíte se ujistit, že jsou všechny provedeny, nebo není dokončen žádný z nich. Pokud kam přidat fakturu a podrobnosti a poté došlo k chybě při vložení platby, vaše databáze zůstane v nekonzistentním stavu.
Normálně se to provádí pomocí bloku try/catch, jako je tento:
try {
$dbconnect->autocommit(false);
$stmt = $dbconnect->prepare("INSERT INTO `invoices`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val1,$val2);
$stmt->execute();
$stmt = $dbconnect->prepare("INSERT INTO `invoice_details`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val3,$val4);
$stmt->execute();
$stmt = $dbconnect->prepare("INSERT INTO `payments`(`col1`,`col2`) VALUES (?,?)");
$stmt->bind_param('ss',$val5,$val6);
$stmt->execute();
$dbconnect->commit();
} catch(Exception $e){
// undo everything that was done in the try block in the case of a failure.
$dbconnect->rollback();
// throw another exception to inform the caller that the insert group failed.
throw new StorageException("I couldn't save the invoice");
}