windows 7 php kurulumu

PHP PDO Transaction kullanımı

828 kez okundu  Yorum yapılmamış  2019.02.26

PHP PDO ile bir takım işlemlerden bahsettim. Şimdi diğer programlama dillerinde de olan ve veritabanı işlemlerinde olmazsa olmaz bir yöntem olan Transaction kullanımından bahsedeceğim. Öncelikle Transaction nedir kabaca buna bir değinelim. Transaction belirli bir grup işlemin ard-arda yapılması işlemidir.

Şöyle ki, diyelim bir veritabanımız var ve bu veritabanından önce bir veri çekip sonra o veriyi düzenleyip sonra yeniden başka bir işlem yapmaya çalışıyorsunuz. Bu işlemlerden herhangi birinin gerçekleşmemesi işleminizin başarısız olması demek ve bir işlem başarısız olduysa hepsinin iptal edilmesi gerekiyor. İşte bu durumda transaction işimizi kolaylaştırıyor.


Transaction işleminde temel olarak 3 adım mevcut. Transaction başlatılması ( beginTransaction() ), transaction başladıktan sonra yapılan işlemler başarılı ise onları işlemek ( commit() ) , eğer başarılı değilse işlemleri geri almak (rollBack () ).

Örnek olarak aşağıdaki kodumuzu inceleyelim:

<?php

    $host = "localhost";
    $username = "root";
    $password = "123456";
    $dbname = "myPdoDatabase";


    //Yukarıda belirtilen veritabanına bağlan. Her iki halde veritabanı olacak. Ya önceden vardı ya da yeni oluşturuldu.
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Transaction başlatıyoruz
    $conn->beginTransaction();

    $isim='Anar';
    $soyisim='Samadov';
    $eposta='[email protected]';

    //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,
    ]); //eğer başarılı bir insert işlemi olduysa sonuç true döner.


    $stmt = $conn->prepare("UPDATE isimler set isim=:isim WHERE id=:id");
    $resultUpdate = $stmt->execute([
        ":isim" => "Murat",
        ":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-ı herhangi bir hata yüzünden geri çekiyoruz
        $conn->rollBack();
        echo "<br>"."Hata oluştu. İşlemler iptal edildi.";
    }

    //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); //Sütun isimlerine göre indisli bir dizi döner
    echo "<br>".json_encode($result, JSON_PRETTY_PRINT);

?>

Gördüğünüz gibi önce veritabanı bağlantısı yapılıyor. Daha sonra $conn->beginTransaction(); metodu çağırılıyor. Bundan sonra insert ve ardından update işlemi yapılıyor. Eğer bu işlemler başarılı ise $conn->commit(); eğer değilse $conn->rollBack(); metodu çağırılıyor. Aslında işlem bu kadar basit. Eğer herhangi bir sorgumuzda hatalı bir veri kullanıp denerseniz işlemlerden biri başarılı olsa dahi veritabanına yansımayacağını göreceksiniz.

Tabiki transaction kullanımının daha gelişmiş işlemleri de var ama şuan konuyu anlamak adına bu kadarı yeterli.

etiketler: #beginTrasaction kullanımı , #php ile transaction , #php pdo transaction

Yorum yapın..

Blogda ara

abone ol