Anda menggunakannya ketika Anda memiliki serangkaian pernyataan sql yang harus dilakukan bersama-sama untuk menjaga konsistensi dalam database Anda. Pikirkan memanggil komit sebagai menetapkan titik simpan dalam game. Setiap kali Anda memanggil rollback, Anda membatalkan semua yang telah dilakukan hingga komit sebelumnya.
Bayangkan situasi di mana Anda perlu menyimpan faktur di tabel faktur, detail di tabel invoice_details, dan pembayaran di tabel pembayaran. Untuk menjaga konsistensi, Anda perlu memastikan bahwa ini semua dilakukan atau tidak ada yang dilakukan. Jika Anda harus menambahkan faktur dan detailnya dan kemudian terjadi kegagalan dalam memasukkan pembayaran, maka database Anda dibiarkan dalam keadaan tidak konsisten.
Biasanya ini dilakukan dengan menggunakan blok coba/tangkap seperti ini:
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");
}