Php Mysql Transaction

Transaction tujuan utamanya untuk mencegah kepincangan data.Transaction berguna jika kita punya proses yang menggunakan lebih dari satu table atau proses.Jika hanya satu tidak perlu.

Contohnya : kasus toko online order barang.

Kita punya 2 tabel Order dan OrderDetail. Pada saat mengorder barang pastinya kita akan menyimpan data header di tabel Order, dan Detail di tabel OrderDetail.

Nah jika terjadi error disaat insert data ke tabel OrderDetail sudah pasti ada kepincangan data dimana ada data Order tanpa data OrderDetail.

Transaction membantu kita mencegah itu terjadi.Ketika terjadi gagal insert dia akan mengembalikan data seperti semula,jadi data header yang di tabel Order juga terhapus otomatis.Agar lebih mudah dimengerti lihat code dibawah

Ini adalah contoh kode php normalnya.

<?php
$koneksi = new mysqli('localhost','root','root','tokoonline');
$koneksi->begin_transaction();
$order = $koneksi->query("insert into orders (nama,total) values ('nama1',50000)");
$order_id = $koneksi->insert_id;
$order_detail = $koneksi->query("insert into orderdetails (order_id,barang,harga) values ($order_id,'baju',5000)");
if(!$order_detail){
	$koneksi->rollback();
}else{
	$koneksi->commit();		
}
?>

Kode diatas pada baris kedua bisa dilihat syntax begin_transaction.

Begin_transaction() menandakan titik awal mulai mendeklarasikan transaction kita.Mulai dari sini semua kode insert kita tidak akan berjalan sampai perintah commit() dilakukan.

Pada saat insert ke table orderdetail, saya sengaja menyalahkan nama tabelnya menjadi orderdetail1 ,lalu kita check apakah berhasil insert jika gagal kita jalankan rollback().

Rollback() berguna untuk mengembalikan ke posisi saat begin_transaction().

Kalau insert berhasil kita jalankan commit().Commit() juga berguna untuk menandakan akhir dari transaction kita.