Използвате го, когато имате серия от sql изрази, които трябва да се изпълняват заедно, за да се поддържа последователност във вашата база данни. Мислете за извикването на commit като за установяване на точка за запис в игра. Всеки път, когато извикате rollback, вие отменяте всичко, което е направено до предишния комит.
Представете си ситуация, в която трябва да запазите фактура във вашата таблица с фактури, подробности в таблицата invoice_details и плащания в таблицата за плащания. За да поддържате последователност, трябва да се уверите, че всички те са направени или нито едно от тях не е направено. Ако къде да добавите фактурата и детайлите и след това е имало неуспех при въвеждането на плащането, вашата база данни е оставена в непоследователно състояние.
Обикновено това се постига с помощта на блок try/catch като този:
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");
}