Kullanıcıların Dikkatine!

Konularda yapılan kısaltmalı ve geçiştirilmiş mesajlar (adsadas, haha, sjsksjsdjks, asdsd, nokta, random, sayı vb.) yasaklanma sebebidir. Mağduriyet yaşanmaması için bu duruma dikkat etmelisiniz.

Daha Fazlası

Hacktivizm Online

Hacktivizm sitesi hack kültürünü benimsemiş kişiler tarafından 2020 yılında kuruldu. Kuruluş amacı Türkiye'nin en büyük hack forumu olmak ve bilgi alışverişinde bulunmaktır.

Daha Fazlası

Konu Açarken Dikkat Edilmesi Gerekenler

Forumda oluşan / oluşması öngörülen görüntü kirliliğine engel olmak ve başlıkların daha temiz dil ile açılması amacıyla kurallarımıza bazı bağımlı / bağımsız maddeler eklemek durumundayız.

Daha Fazlası

Programlama Veritabanı işlemlerin'de begintransaction

Space

Grafiker
Katılım
31 Ocak 2021
Mesajlar
127
Tepkime puanı
358
Konum
Moskova
İlgi Alanlarınız
Web Tasarım
Cinsiyet
  1. Erkek
Merhabalar,

Benim için hayat kurtaran bir işlev bazen aynı anda 20 farklı alanda ve 3-4 farklı veritabanı üzerinde değişiklikler yapıyorum ve bu işlev olmasaydı bin satırlık kod 30-40 binlere çıkmak zorunda kalırdı.

begintransaction Nedir?

Veritabanı üzerinde yaptığınız işlemleri begintransaction ile en başta başlattığınız da bu işlemler toplanır ve siz yaptığınız işlemleri commit etmediğiniz sürece de veritabanı üzerinde bu işlemler gerçekleşmez. Bir işlev yaptınız ve hata kodu döndü rollback ile işlemi geri alabilirsiniz.

Örnek bir kullanım göstereyim şuan kodlamasını yaptığım bir proje üzerinden anlatım yapayım rahat şekilde kavrayacaksınız.

PHP:
<?php
$db->begintransaction();
$control = $db->from('mail_accounts')->where('id',post('id'))->first();
if($control){ $mail_varmi = $db->from('mailbox')->select('id,attachments')->where('account_id',post('id'))->run(); if($mail_varmi){ $mail_delete = $db->delete('mailbox')->where('account_id',post('id'))->done(); }else{ $mail_delete = true; } $delete = $db->delete('mail_accounts')->where('id',post('id'))->done(); if($mail_delete && $delete){ app::log_add('Posta Hesabı ve iletileri silindi. Posta Hesabı: '.$control['username']); $db->commit(); $jsondata = [ 'tamam' => true, 'heading' => 'Posta Hesabı Silindi!', 'text' => 'Posta hesabı ve iletileri tamamen silinmiştir.', 'type' => 'success', 'token' => session('token'), ]; }else{ $db->rollBack(); $jsondata = [ 'heading' => 'Bir Hata Oluştu!', 'text' => 'Posta hesabı silinirken bir hata oluştu. Lütfen sayfayı yenileyerek tekrar deneyiniz.', 'token' => session('token'), ]; }
}else{ $jsondata = [ 'heading' => 'Bir Hata Oluştu!', 'text' => 'Silmeye çalıştığın hesap bulunamadı, varolmayan bir hesabı silmeye çalışıyor olabilirsin.', 'token' => session('token'), ];
}
?>

Öncelikle işlemlerimin en başına gelip bir transaction işlemi başlatıyorum o andan itibaren yazılan her işlev ben commit edene kadar geçerli kılınmayacaktır.

Ek olarak ben pdo kullandığım için ve mysqli'de de aynı durum geçerli pdo classs'ı içinde bir fonksiyon bulunduğu için direkt begintransaction yazarak kullanabiliyorum ama farklı direkt sql olarak da şu şekil'de kullanabilirsiniz.

PHP:
<?php
$db->query('BEGIN TRANSACTION');
$mail_sil_sorgu = $db->prepare('DELETE FROM mailbox WHERE accound_id = :id');
$mail_cikti = $mail_sil_sorgu->execute([ 'id' => 1
]);
$mail_hesap_sil = $db->prepare('DELETE FROM mail_accounts WHERE id = :id');
$hesap_cikti = $mail_hesap_sil->execute([ 'id' => 1
]);
if ($mail_cikti && $hesap_cikti){ $db->query('COMMIT'); // işlemi tamamla
} else { $db->query('ROLLBACK'); // işlemi iptal et
}

Burada yaptığım işlem bir mail hesabını veritabanı üzerinden silme ama bir kaç tablo üzerinde işlem bulunduğu için herhangi bir alan da veritabanı sorunu oluşur ise sistem sapıtacağından hayat kurtaran bir işlevdir transaction işlevi böyle bir şey yakalarsam direkt rollback yaparak komutları iptal ediyorum.

Önce mail hesabına ait mailleri siliyorum sonra da mail hesabını kaldırıyorum eğer transaction kullanmasaydım mailbox'daki iletiler silinip hesap silinmezse hesabın posta kutusu açılamadığı için hata verecekti veya tam tersi mailler silinmeyip hesap silinseydi o zaman da hangi hesaba ait olduğu bilinmeyen binlerce posta spam gibi veritabanında yer alacaktı. Kullanım alanı çok fazla ama ben özellikle ödeme sistemlerinde kullanıyorum çünkü o alanda çok fazla veritabanı işlemi gerçekleştiriyorum.

Anlamadığınız bir kısım olur ise konu altında sorabilirsiniz.
 

Konuyu görüntüleyen kullanıcılar:

Hukuksal Sorunlar İçin[email protected]
For Legal Problems[email protected]
Hacktivizm.Org
Hacktivizm.Org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Hacktivizm.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Hacktivizm saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Hacktivizm üyelerinin yaptığı bireysel hack faaliyetlerinden Hacktivizm sorumlu değildir. Sitelerinize Hacktivizm ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz. Sitemizde yer alan içerikler hakkındaki şikayetlerinizi Buradan iletişime geçerek bildirebilirsiniz. Please Report Abuse, DMCA, Scamming, Harassment, Crack or any Illegal Activities to [email protected]
Hack Forum
Hacktivizm, 2020 yılında kurulmuş bir siber güvenlik forum sitesidir aynı zamanda hack forumu,hack sitesi,hack forum ve Türk hack forumudur. Hack forum aramalarında ilk sayfada olan bu hack forum sitesi gün geçtikçe gelişmektedir. Hack Forum kelimesinin anlamı ise, hacker kültürü ve bilgisayar güvenliği ile ilgili tartışmalara adanmış bir İnternet forumudur. Web sitesi, analiz şirketi Alexa Internet tarafından web trafiği açısından "Hacking" kategorisinde bir numaralı web sitesi olarak yer almaktadır.

Telefon Takip - İphone Hackleme - PDF Şifre Kırma - Telefon Hackleme - İnstagram Hesap Çalma - Twitter Hesap Çalma - Facebook Hesap Çalma - Wifi Şifre Kırma - Telefon Şifresi Kırma

Hacktivizm Twitter Hacktivizm Youtube Hacktivizm İnstagram Hacktivizm Telegram

Üst