Bir çoğumuz veri tabanına bir işlemle bir çok veri girme gibi durumumuz oluyor. Bu veri girişi esnasından tabloların birinde oluşan problem bütün sistemi etkileyecek ve veri tabanından geri dönüşü olmayan durumlara yol açacaktır. İşte bu gibi durumlarda kullanmamız gereken önemli fonksiyonlardan bir betinTransaction’dur.
beginTransaction():
Kullanmış olduğumuz (mysql,Postgresql,oracle) veritabanı üzeride geçici işlemler yapmamıza imkan sağlar.
Geçici olarak işlem yapma için $db->;beginTransaction(); comutunu sql sorgularına başlamadan yazıyoruz.
PDO nesne örneği üzerinde veritabanından yapmak istediğimiz değişiklikleri commit(); komutu ile işleme konur.
Bu komuttan sonra veritabanında yapılan değişiklikleride geri dönüş yoktur. Eğer olası bir hatada geriye
dönülmesi gerekiyorsa commit() komutunu vermeden rollBack(); komutu ile veri tabanındanki değişiklikleri geri alıyoruz.
Bu sayede commit komutundan önce yapılan değişiklikler geri alınır. beginTransaction bir çok e-ticaret sitesinde
veya çoklu veri girinde kullanılmaktadır. Bu yöndem MYSQL kendi yapısında mevcuttur ama php komutları bu işlemi dahada
kolaylaştırmaktadır. Aşağıda PDO ve MYSQLI için örenekler bulunmaktadır.
Veri tabanı bağlantınızı kendinize yorumlayarak örnekleri çoğalta biliriniz.
BAŞARILAR.
PHP PDO:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | $bgdb=new PDO("mysql:host=localhost; dbname=aolyedekweb;charset=utf8","root",""); $bgdb->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); $bgdb->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $bgdb->beginTransaction();//sql işlemlerine başlamandan eklenecek $sql1=$bgdb->exec("delete from cagsoz where id=374"); $sql2=$bgdb->exec("delete from cagsoz where id=375"); if($sql1==false || $sql2==false){ $bgdb->rollBack();//işlem hatalı olursa rollBack() ile geri alınıyor. echo "HATA OLUŞTU İŞLEM İPTAL EDİLDİ!".$sql1." ".$sql2; }else{ $bgdb->commit();// İşlem başarılı olunca commit() komutu ile aktif ediliyor. echo "İŞLEM BAŞARI İLE TAMAMLANDI.";} //beginTransaction() PREPARE ORNEGI try{ $bgdb=new PDO("mysql:host=localhost; dbname=aolyedekweb;charset=utf8","root","cglr3193+"); $bgdb->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); $bgdb->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $bgdb->beginTransaction();//sql işlemlerine başlamandan eklenecek $sql1=$bgdb->prepare("delete from cagsoz where id=372");$sql1->;execute(); $sql2=$bgdb->prepare("delete from cagsoz where id=367");$sql2->;execute(); $bgdb->;commit(); echo "Silinen sql 1 satır id :".$sql1->rowCount(); echo "Silinen sql 2 satır id : ".$sql2->rowCount(); }catch(PDOException $sss){ echo "Veri silinemedi!"; $bgdb->rollBack(); } |
PHP PDO PREPARE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | try{ $bgdb=new PDO("mysql:host=localhost; dbname=aolyedekweb;charset=utf8","root","cglr3193+"); $bgdb->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); $bgdb->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $bgdb->beginTransaction();//sql işlemlerine başlamandan eklenecek $sql1=$bgdb->prepare("delete from cagsoz where id=372");$sql1->execute(); $sql2=$bgdb->prepare("delete from cagsoz where id=367");$sql2->execute(); $bgdb->commit(); echo "Silinen sql 1 satır id :".$sql1->rowCount(); echo "Silinen sql 2 satır id : ".$sql2->rowCount(); }catch(PDOException $sss){ echo "Veri silinemedi!"; $bgdb->rollBack(); } |
PHP MYSQLI:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $dbmysqli=@new mysqli("localhost","root","","online2"); if($dbmysqli->connect_errno) die("HATA :".$dbmysqli->connect_error); if(function_exists("mysqli_stmt_get_result")==false) die("mysqlnd desteği yok"); $dbmysqli->set_charset("utf8"); $dbmysqli->autocommit(false);//saklı yordam başlangıcı $sorgusonuc1=$dbmysqli->query("DELETE FROM aktifuser WHERE id=7"); $sorgusonuc2=$dbmysqli->query("DELETE FROM aktifuser WHERE id=6"); if($dbmysqli->errno>;0){ $dbmysqli->rollBack();//hata olduğu için işlemi geri aldık echo "İşlem iptal edildi"; }else{ $dbmysqli->commit(); echo "İşlem başarıyla tamamlandı."; $usersonuc=$dbmysqli->query("select * from aktifuser"); while($degerler=$usersonuc->fetch_array()){ printf(" User Name :%s",$degerler['USERad']); } } |