PHP’de Transaction Kullanımı

En çok bankacılık sistemlerinde kullanılan bir olay bu. Örneğin bir hesaptan diğerine para aktarımında aslında 2 sorgumuz var. Önce mevcut hesaptan bakiye düşüyoruz, daha sonra diğer hesabın bakiyesine ekliyoruz. Ancak ya mevcut hesaptan bakiyeyi düştükten sonra diğer hesaba bakiye eklerken anlık bir sorun olursa ne olur? O zaman mevcut hesaptan para çıkar ama diğer hesaba para gelmez, işler karışır.

İşte bunu önlemek için sorguları transaction ile yaparsak, yani bir işlem bloğu içerisinde yaparsak sorun kalmayacaktır.

Transaction’ı PDO’da başlatmak için beginTransaction() metodu kullanılır;

$db->beginTransaction();

Daha sonra 2 sorguyu çalıştırırız;

$sorgu1 = $db->prepare('UPDATE accounts SET balance = balance - :amount WHERE account_id = :id');
$sonuc1 = $sorgu1->execute([
   'amount' => 250,
   'id' => 1
]);

$sorgu2 = $db->prepare('UPDATE accounts SET balance = balance + :amount WHERE account_id = :id');
$sonuc2 = $sorgu1->execute([
   'amount' => 250,
   'id' => 2
]);

Şimdi transaction içerisinde bu işlemleri yaptığımızda, eğer her 2 sorguda başarı ile sonuçlandıysa, o zaman commit() metodunu kullanarak işlemi tamamlayacağız. Eğer bir sorun olur ise rollBack() metodu ile yaptığımız işlemleri geri alabileceğiz.

if ($sonuc1 && $sonuc2){
   $db->commit(); // işlemi tamamla
} else {
   $db->rollBack(); // işlemi geri al
}

Siz transaction içindeki sorgularınız commit etmediğiniz sürece, sadece mevcut bağlantınızda veritabanı değişikliğini görürsünüz. Örneğin commite etmeden önce veritabanınızı kontrol ettiğinizde, sorguları çalıştırmış olmanıza rağmen değişikliği göremeyeceksiniz. Ne zaman ki commit metodunu çalıştırıp işlemi tamamlarsınız, o zaman bütün bağlantılarda bu işlem geçerli olacaktır.

Böylece olası durumlarda, kayıpları önlemek için harika bir yolu keşfetmiş oluyoruz.

Not: Eğer bu işlemi PDO’nun metodları ile değilde, mysql ile yapmak isterseniz. O zaman bir şeye dikkat çekmem gerek. Aynı işlemi PDO’nun transaction metodlarını kullanmadan yapalım.

$db->query('BEGIN TRANSACTION');

$sorgu1 = $db->prepare('UPDATE accounts SET balance = balance - :amount WHERE account_id = :id');
$sonuc1 = $sorgu1->execute([
   'amount' => 250,
   'id' => 1
]);

$sorgu2 = $db->prepare('UPDATE accounts SET balance = balance + :amount WHERE account_id = :id');
$sonuc2 = $sorgu1->execute([
   'amount' => 250,
   'id' => 2
]);

if ($sonuc1 && $sonuc2){
   $db->query('COMMIT'); // işlemi tamamla
} else {
   $db->query('ROLLBACK'); // işlemi geri al
}

Burada 2 işlemden birisi başarısız olsa bile otomatik commit ettiği için diğer tüm bağlantılarda da görünecek. Bunun önüne geçmek için, AUTOCOMMIT değerini 0 yapmamız gerekiyor. Yani kodların en başına bir de şunu eklediğimizde;

$db->query('SET AUTOCOMMIT = 0');

Artık işlem sorunsuz şekilde çalışacaktır. Ancak bunun yerine PDO’nun metodlarını kullanmak tabi ki daha yararlı 🙂

Başka bir anlatımda görüşmek üzere, detaylı anlatım için videoma gözatabilirsiniz.

Başlamak İçin Geç Değil!

Merhaba, bir çok yaşıtım ve büyüklerim başlamanın geç olduğu konusunda karamsar fikirlere kapılıp başarılı olamayacaklarını düşünüyorlar. Ancak tamda bu konuyla ilgili çok güzel bir Atasözümüz var.

“Öğrenmenin yaşı yoktur.”

Dolayısı ile, kaç yaşında olursanız olun hiçbir zaman geç olmayacak. Dezavantajları elbette olacaktır, şuan ilk okuldan beri bu işe gönül vermiş kendini geliştirmiş çok güzel bir nesil yetişiyor. Belki 30 yaşında bir bireyin bu genç beyinlerle yarışması biraz zor olacaktır ama işin güzel yanı, bu bir yarış değil 🙂 Kimse birbirinin rakibi değil, hepimiz aynı işe gönül vermiş mantıklı bireyleriz.

Eğer bu sektörde kimseyi rakip olarak görmez, herkese karşı hoşgörülü ve saygılı olursanız eminim bir yerlerden iyi bir başlangıç sağlayabilirsiniz. Herşeyde olduğu gibi bu işte de saygı ön planda. Daha sonrasında ise egoları çıkarıp asmak gerekiyor.

Ve tabi ki kabullenmek, en iyi başlangıçtır. Çünkü bazen kabul etmek gerekir ki, dünyayı değiştirecek yazılımlar, fikirler, projeler geliştiremeyebiliriz. Ama bu bizim moralimizi bozmamalı, motivasyonumuzu düşürmemeli. Herkesin irili ufaklı bir görevi var bu dünyada, bunu başarmak diğer başarılarında önünü açacaktır. Yeter ki siz kendinize inanın, iyi bir başlangıç beraberinde sizi bulacaktır. Ki ne demişler;

“İnanmak, başarmanın yarısıdır.”

O yüzden daha fazla vakit kaybetmeyin, hala başlamadıysanız ama merakınız varsa, bir yerlerden başlamanın vakti sizce de gelmedi mi?

Ve unutmayın;

“Bütün büyük işler, küçük başlangıçlarla olur.”

Birde benim şöyle bir sözüm var;

Küçük şeylerin bir bütünüdür büyük.

Hayatta 25, Sektörde 10!

Bugün 12 ocak, 25 sene önce bugün sabah 9 sularında hayata gözlerimi açmışım 🙂 Ayrıca 10 sene önce ocak ayının başlarında blogger ile blog tutmaya başlayıp bir şeyler yapmaya başlamışım 🙂

Ayrıca bu mart’ta ise erbilen.net bloğumun 6. yılı oluyor, hepsi üst üste gelince, geçen sene erbilen.net’i yenilemeyi düşünüp 1 sene bir şey yapmayınca, bu sene bir şeyler yapmaya çalışacağım kurs eğitimlerini tamamladıktan sonra.

Yeni bir yaş, yeni bir yıl, yeni umutlar. Herkesin her istediği gönlünce olsun, doğum günümü kutlayan herkese teşekkür ederim.

İyi ki varsınız.

Doğum günüme ve sektördeki 10. yılıma özel indirim kuponunu biraz daha düşürdüm 🙂 Hala almadıysanız;
https://www.udemy.com/php-egitim-seti/?couponCode=ERBILEN

Benim için 2017 nasıl geçti?

Her sene gibi bu seneyide anlatacağım ancak ne çok uzun, ne çok kısa olacak. 4. ayında Malta’dan Türkiye’ye döndüm. Bir süre sorunlar ve sıkıntılarla uğraştım, arkadaşlarımla olan problemlerim, yakınlarımla olan problemlerim derken, herkesin bana sırt çevirdiğini gördüm. Bu süreçte ise en çok Mert abim ve Babam bana destek oldular. O yüzden buradan onlara teşekkür ediyorum.
Okumaya devam et Benim için 2017 nasıl geçti?

PHP Eğitim Setim Çıktı!

Bir süre önce büyük bir özenle hazırlamaya başladığım eğitim setimi ön sipariş olarak yayına almaya karar verdim. Bu sayede hem sete başlamak isteyen arkadaşlar kursa katılıp başlayabilecek, hemde erken alanlar için indirimli olacak.

Normalde 100₺ olarak düşündüğüm kurs fiyatını, 10 Ocak 2018‘e kadar alan arkadaşlar için 50₺ yaptım. Verdiğim indirim kupon kodu ile %50 indirimli alabilirsiniz.

Bunu yapmamın en büyük sebebi, hem sizin için hem de kendim için 🙂

Umuyorum beraber güzel zaman geçiririz kursta.

Kurs henüz tamamlanmadığı için yeni kupon koduyla indirimli olarak alabilirsiniz.

Kurs Linki: https://www.udemy.com/php-egitim-seti/?couponCode=ERBILEN
Kupon Kodu: ERBILEN

Havale ile Ödeme Yapmak

Udemy ile kredi kartı bilgilerinizi paylaşmak istemezseniz, ya da kredi kartınız yok ise bana havale yaparak benden ücretsiz kupon alabilirsiniz. İlgili banka bilgileri aşağıda yer almakta, gönderme işleminden sonra bana mail atarsanız kuponu size iletirim.

TR7300 0460 0026 8880 0035 2643
Akbank – Tayfun Erbilen

Hepiniz adamsınız,
Esenle, sevgiyle, neşeyle, hoppa şinanay kalın.

PHP Eğitim Setinde Hangi Projeleri Hazırlamalıyım?

Udemy ve prototürk üzerinden satışını yapacağım eğitim setinde yer vereceğim projelere henüz karar veremedim. Bir anket hazırladım, 3 şık seçme hakkınız var. Eğer şıklardan hiçbirisi size hitap etmiyor ise yorum olarakta bana istediğiniz bir projeyi söyleyebilirsiniz.

PHP Eğitim seti içerisinde hangi projelere yer vermeliyim?

Sonuçları görüntüle

Yükleniyor ... Yükleniyor ...

SQL ve MySQL Arasındaki Fark Nedir?

Aslında bu komik bir soru, ancak bir çok kişi tarafından aratılmış ve bende şöyle bir aratıp sonuçlara baktığımda çok güzel sonuçlar göremediğim için ufak bir yazı yazmak istedim. İngilizce olarak “what’s difference between sql and mysql” diye arattığımda, çok güzel bir örnek karşıma çıktı. Bunu sizlerle paylaşmak istiyorum.

SQL uzun haliyle Structured Query Language yani Yapılandırılmış Sorgu Dili demektir. Basit tanımıyla, veritabanı içindeki depolanan verilere ulaşmak ve onlar üzerinde işlem yapmak için kullanabileceğimiz bir dildir.

MySQL ise, bir üründür ve (RDMS * Relational Database Management System) İlişkisel Veritabanı Yönetim Sistemlerinden biridir. MySQL haricinde Oracle, Informix, Postgres ve MSQL‘de aynı şekilde birer üründür ve veritabanı yönetim sistemidir.

Tüm bu ilişkisel veritabanı yönetim sistemleri dil olarak SQL’i kullanır. Her birinin kullandığı SQL dilinde küçük farklılıklar olsada temelde hepsi SQL’i kullanmaktadır.

Bunu gerçek hayattan bir örnekle açıklamak gerekirse, Türkiye’de konuşulan dil Türkçe’dir. Ancak bazı şehirlerde lehçe’de değişiklikler olur. Yine de temelinde konuşulan dil Türkçe’dir.

Yani Türkçe’ye SQL dediğimizde, bazı şehirler ise veritabanı yönetim sistemleri olsun. Bütün RDMS’ler aynı dili konuşuyor sadece lehçeleri farklı o kadar.

Umarım basitçe anlaşılır olmuştur 🙂 Sizinde bu konuda üstüne katmak istediğiniz bilgiler olursa lütfen çekinmeden yorum bırakın.

PHP Dizi Fonksiyonları

Merhaba arkadaşlar, bu makalede sizlere PHP’de diziler’de sıkça kullanılan dizi fonksiyonlarından bahsetmek istiyorum. Mümkün olduğunca örneklerle ve fonksiyonların eksik kaldığı yerlerde kendimce çözümlerle sizlere bu dizi mevzusunu aktaracağım. Şimdiden iyi okumalar 🙂
Okumaya devam et PHP Dizi Fonksiyonları

Centos Üzerinde GoLang Kurulumu

Yavaş yavaş yeni dillere merak salarken, öğrendiğim bilgileri de makale olarak sitemde paylaşmaya karar verdim. Daha önce de bunu Angular JS için yapmıştım 🙂 GoLang’in ne olduğunu neden kullanmamız gerektiğini bir kenara bırakarak, önce Centos üzerinde nasıl kurarak ilk örneğimizi yaparız bunu göstermek istiyorum.

İlk olarak /tmp klasörüne geçiş yapalım.

cd /tmp

Daha sonra GoLang’i indirelim.

curl -LO https://storage.googleapis.com/golang/go1.7.linux-amd64.tar.gz

GoLang’i /usr/local içine kuralım.

sudo tar -C /usr/local -xvzf go1.7.linux-amd64.tar.gz

Şimdi GoLang için ilgili klasörlerimizi oluşturalım.

mkdir -p ~/projects/{bin,pkg,src}

Dosyaları düzenlemek için nano kullanacağız, sunucunuzda yoksa aşağıdaki komut satırı ile kuralım;

yum install nano

Şimdi Go için Yolları Ayarlayalım. Önce /etc/profile.d/path.sh dosyasını açalım.

nano /etc/profile.d/path.sh

Bu dosya içine aşağıdaki kodları yazıp kaydedelim. Kaydetmek için Commant (CTRL) + x dedikten sonra y tuşuna basarak enter’layın.

export PATH=$PATH:/usr/local/go/bin

/root dizinindeki .bash_profile dosyasını açalım.

nano ~/.bash_profile

En alta şu kodları ekleyip kaydedelim.

export GOBIN="$HOME/projects/bin"
export GOPATH="$HOME/projects/src"

Değişiklikleri mevcut bash profilimize uygulamak için, profilleri yeniden yükleyelim.

source /etc/profile && source ~/.bash_profile

Kurulumu tamamladık. Artık örnek bir Go dosyasını /projects/src altına oluşturarak ilk “hello world” örneğimizi oluşturalım.

nano ~/projects/src/test.go

içine ilk go kodlarımızı yazıyoruz.

package main

import "fmt"

func main() {
    fmt.Printf("Merhaba Gardaş")
}

Daha sonra oluşturduğumuz dosyayı derlememiz gerekiyor.

go install $GOPATH/test.go

Ve şimdide konsol’da çalıştırıp çıktısına bakalım.

$GOBIN/test

Çıktı:

Artık GoLang hakkında daha fazla araştırma yaparak, kendiniz alıştırmalar yapmaya başlayabilirsiniz.

Hepimize kolay gelsin 🙂

Kaynak: https://www.digitalocean.com/community/tutorials/how-to-install-go-1-7-on-centos-7

Mac’de Gizli Dosyalar Nasıl Gösterilir?

Mac’de bazı dosyalar gizli olarak tutulmaktadır. En basitinden .htaccess ya da .DS_Store dosyaları.

Bu tarz gizli dosyaları mac’de herhangi bir program kurmadan göstermek isterseniz, ilgili klasöre girin;

Daha sonra Command + Shift + . (nokta) kombinasyonunu kullanarak gizli dosyaları açığa çıkarın.

Oldu bitti maşallah. Kolay gelsin.