PDO Transaction Kullanımı

Bu seferki PHP dersi mizde PDO Transaction ile verilerin veritabanında doğru işlendiğini garanti eder yani iki farklı sorgu çalıştıracaksak ve ilk tablodan veriyi silecek diğer tabloda ekleyeceksek Transaction başlatırız ve commit ederiz bu işlem neticesinde her iki tablo sorgusununda doğru çalıştığını garanti etmiş oluruz.

Bu işlemi en güzel bir uygulama örneği ile anlatabilirim örneğin bir oyun uygulaması yazıyoruz ve oyun içerisinde A kullanıcısından itemi alıyoruz B kullanıcısındanda Parayı alıyoruz, A kullanıcısına parayı B kullanıcısına ise itemi veriyoruz işte bu aşamada B kullanıcısından aldığımız para tablosunu A kullanıcısındanda verdiğimiz para tablosunu güncellememiz gerekecektir, bu işlemleri alt alta SQL sorguları şeklinde gerçekleştiririz olduki program akışı esnasında bir sorun oluştu yada yazım hatamız mevcut işte bu durumda tüm SQL sorgularımız doğru çalışmadan hiç bir işlem gerçekleşmeyecektir. Bu tarz önem taşıyan konularda Transaction hayati öneme sahiptir çünkü tüm sorguların doğru geçekleşmesi gerekir aksi takdirde ortalık karışacaktır.

PDO kullanımı üzerinden bu işlemi anlatacağım mysql veya mysqli de bu işlem yapılabilmektedir ancak değinmeyeceğim.

Öncelikle PDO MySQL bağlantımızı gerçekleştirelim ;

$db=new PDO('mysql:host=localhost;dbname=veritabaniadi','root','sifre');

DB bağlantısını oluşturduktan sonra sorgularımızı çalıştırmadan önce Transaction başlatmalıyızki hangi aralıkların %100 doğrulu şekilde çalıştığından emin olmamız gerektiğini anlatabilelim .

$db->beginTransaction();

Sonraki aşamada sorgularımızı ekleyelim

$sor1=$db->prepare("UPDATE tablo_balance SET amaount = - :tutar WHERE userid=:userid");
$sonuc1=$sor1->execute(Array(:tutar=>200,userid=>1));

$sor2=$db->prepare("UPDATE tablo_balance SET amaount = - :tutar WHERE userid=:userid");
$sonuc2=$sor2->execute(Array(:tutar=>200,userid=>2));

sorgularımızı ekledikten sonraki işlem bu sorguların doğru mu çalıştığını kontrol etmek ve sonrasında doğru çalışmış ise commit edecez çalışmadı ise tüm doğru gerçekleşen işlemleri geri alacağız.

if($sonuc1 && $sonuc2){
    $db->commit();
}else{
    $db->rollBack();
}

bu işlemler neticesinde gerçekleştiren işlemlerin MYSQL işlemlerinin doğru çalıştığını garanti edebiliriz.