PHP MySQL TRANSACTION Kullanımı
Php Transaction işlemini bankacılık işlemlerindeki para transferi esnasında kullanılan bir işlem gibi düşünebiliriz ve bu işlemin önemi kritik seviyededir . Bu sebeple işlem esnasında herhangi bir hata oluştuğu zaman işlemin geriye alınması gerekmektedir . Bunu şu şekilde bir örnekle açıklayabiliriz .
A kişisi hesabından B kişisine 500 TL para göndermek istediğinde A kişisinin hesabından 500 TL düşülecek ve B kişisinin hesabına 500 TL eklenmesi eklenecektir. Ancak A kişisinin hesabından 500 TL düşüldükten sonra B kişisinin hesabına 500 TL eklenmeden bir hata oluşması durumunda orataya can sıkıcı bir durum çıkacaktır . İşte bu tarz can sıkıcı durumların önüne geçmek için PHP’de MySQL TRANSACTIONS kullanılır.
PHP MYSQL Transaction işlemi basit 3 adımda yapılmaktadır .
Transaction başlatılması “beginTransaction()”
Transaction başladıktan sonra yapılan işlemler başarılı ise onları işlemek “commit()”
Transaction eğer başarılı değil ve işlemi geri almak gerekiyorsa “rollBack ()”
Örnek olarak aşağıdaki kodumuzu inceleyelim .
<?php
// veri tabanı bağlantımızı gerçekleştiriyoruz
$host = "localhost";
$username = "root";
$password = "123456";
$dbname = "testveritabani";
//Yukarıdak belirtilen bilgiler ile veritabanına bağlanıyoruz.
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Yukarıda belirttiğimiz Transaction işlemini burada başlatıyoruz
$conn->beginTransaction();
$isim='Serhat';
$soyisim='Alpaslan';
$eposta='serhat@serhatalpaslan.com';
//prepare methodu ile insert sorgumuzu yazıyoruz fakat değerler yerine gerçek değerleri yazmıyoruz
$stmt=$conn->prepare("INSERT INTO isimler (isim, soyisim, email) VALUES (:isim, :soyisim, :email)");
//değerleri bind etmenin bir diğer yöntemi
$resultInsert=$stmt->execute([
":isim" => $isim,
":soyisim" => $soyisim,
":email" => $eposta,
]); //bu işlem eğer başarılı olursa sonuc TRUE Boolean değeri olarak dönecektir.
$stmt = $conn->prepare("UPDATE isimler set isim=:isim WHERE id=:id");
$resultUpdate = $stmt->execute([
":isim" => "Serhat",
":id" => "90"
]);
//Tüm işlemler başarılı ise
if($resultInsert && $resultUpdate){
//Başlattığımız transaction-nın commit edilmesini sağlıyoruz
$conn->commit();
echo "<br>"."Tüm işlemler başarıyla gerçekleşti";
}else {
//Başlattığımız transaction aşağıdaki komut ile geri alınıyor.
$conn->rollBack();
echo "<br>"."Tüm işlemler iptal edildi ve geri alındı.";
}
//veritabanından veri çekiyoruz
$query = $conn->prepare("SELECT * FROM isimler");
$query->execute(); //Bir hazır deyimi çalıştırır
$result=$query->fetchAll(PDO::FETCH_ASSOC);
?>
yukarıdaki örnekte php transaction işleminin nasıl yapıldığını anlatan basit bir örnek hazırladık . Ancak php transaction işlemlerini tabiki de sadece parasal işlemler de kullanıldığını düşünmek yanlış olacaktır . Bu sebeple php ile transactions konusunu üzerine ileride daha farklı kullanım şekilleri üzerine birşeyler hazırlarız.
Bu adresden Php Transaction için daha fazla bilgi bulabilirsiniz. Ayrıca diğer php derslerini de inceleyebilirsiniz.