PDO Kullanımı ve Güvenli Veritabanı İşlemleri

Madem yeni bir blog açtık, PHP PDO kullanımı yazısını yazmazsak olmaz. İlk paylaşımımız bu olsun o zaman. Umarım işinize yarar ve içeriği faydalı bulursunuz.

PHP’nin MySQL fonksiyonlarının desteğini kaldırması ile birlikte benzer yapıda olan MySQLi fonksiyonları türemiş olsa da sektörde en fazla kullanılan PDO’nun yerini almayı başaramadı. PDO’nun lider olmasının en büyük sebepleri ise; güvenlik, kullanım kolaylığı ve optimizasyon.

PDO Kurulumu & Etkinleştirme

PDO artık çok fazla yaygınlaştığı için hostinglerde ve local sunucu programlarında otomatik etkinleştirilmiş olarak geldiği için sizin herhangi bir kurulum ya da ayar yapmanıza gerek kalmıyor. Ama biz en kötü senaryoyu düşünelim, hostinginizde PDO çalışmıyor mu? O zaman adımları takip edin de aktifleştirelim şunu.

Öncelikle PDO kullanabilmemiz için php sürümümüz en az 5.1 olmalı. Değil ise cPanel üzerinden php sürümünüzü güncelleyebilir ya da bu özelliği kullanamıyorsanız hosting firmanız ile iletişime geçerek güncellenmesini sağlayabilirsiniz.

PHP sürümümüzü ayarladığımıza göre artık PDO etkinleştirme kısmına gelelim. Öncelikle php.ini dosyasını açın ve aşağıdaki 2 satırı bulun. (MySQL kullanacağınızı varsayıyorum)

  1. extension=php_pdo.dll
  2. extension=php_pdo_mysql.dll

Üstteki satırları bulduktan sonra yapmanız gereken işlem sadece  önlerindeki noktalı virgülleri (;) silmek ve dosyayı kaydetmek. Artık tamamen hazırırz, bağlantı ayarlarımızı yaparak kullanmaya başlayabiliriz.

PDO ile Veritabanı Bağlantısı

Veritabanı bağlantı kısmını bilgileri değişkene atayarak mı yazsam yoksa direkt olarak sorgu üstünde mi yapsam diye kararsız kaldım fakat son olarak değişken ile göstermeye karar verdim. Siz isterseniz değişkenleri silerek tek bir satır üzerinde bağlantı sorgusunu yazabilirsiniz. (Açıklama satırına bırakıyorum)

Başlangıç kısmındayken şunu da belirteyim veritabanı işlemlerimizi yapacağımız nesne ismini $db olarak oluşturacağım. Aynı şekilde bunu da değiştirebilirsiniz.

Bağlantı yaparken karakter setini utf-8 olarak seçtik bu yüzden myqsl fonksiyonlarındaki gibi karakter seti ile ilgili herhangi bir sorgu göndermemize gerek kalmadı.

PDO ile Tekil Select İşlemi

PDO ile veritabanından tek bir satıra ulaşmak istediğimiz zaman öncelikle query, sonrasında fetch methodlarını kullanmamız gerekiyor.

Örneğin yukarıda yazdığımız kodda ogrenciler tablosunda ismi Ahmet olan bir öğrenci olup olmadığını kontrol ettik. Çift tırnaklar arasında {$degisken} şeklinde kullanım yapabildiğimizden dolayı tırnakları bölüp değişken sonrasında tekrar nokta operatörü ile birleştirmemize gerek kalmadan kolayca değişkenimizi sorgumuzun içine yerleştirdik.

Buradaki asıl bir önemli nokta ise fetch metodu için kullandığımız FETCH_ASSOC bize geri dönen değerin bir dizi içinde döndürülmesini sağlıyor.  Sonrasında erişmek istediğimiz değeri sorgu değişkenimizin elemanlarından sütün adını kullanarak ulaşabiliyoruz.

PDO ile Çoklu Select İşlemi

Birden fazla satıra ulaşmak istediğimizde çoklu select sorgularını kullanacağız. En basit şekilde şöyle tanımlayalım; veritabanımızda bulunan öğrencilerden 20 yaşında olanları listelemek istersek karşımıza birden fazla kayıt çıkacağı için çoklu seçim işlemini yapmak zorundayız.

Aynı şekilde yine FETCH_ASSOC kavramını kullandık bu yüzden veriler dizi şeklinde geri dönüş sağladı. Burada kullandığımız farklı yapı ise rowCount methodu oldu. İngilice olarak basit bir çeviri ile count kelimesini sayaç olarak kullanabiliriz. If bloğu içinde gönderdiğimiz sorgudan etkilenen kayıtların olup olmadığını sorguladık ve eğer var ise foreach döngüsü ile sıra ile işleme soktuk. Ekrana ogrenciler tablosundan yaşı 20 olan kayıtları şu şekilde yazdırılacak.

  • 2 – Ahmet
  • 5- Mustafa
  • 8- Aleyna

PDO ile Insert (Ekleme) İşlemi

Tablomuza yeni kayıtlar ekleyeceğimiz zaman SQL sorgumuzu parça parça bölmeden PDO ile kolayca değişkenlere bağlayabilir ve içeride fonksiyonlar ile işlemler yapabiliriz. Insert işlemi yaparken prepare ve execute methodlarını kullanacağız.

Örnekte prepare methodu içindeki SQL sorgumuzda bıraktığımız her bir soru işareti (?) sonraki execute methodunda array içinde gönderdiğimiz değişkenlere eşitleniyor. Burada dikkat etmeniz gereken şey soru işaretleri ve değişkenler aynı sıra numarası eşleştirilmektedir.

PDO ile Update (Güncelleme) İşlemi

Yapı olarak ekleme işlemi ile aynı sistemi kullanacağız fakat sadece SQL sorgumuzu güncelleme şeklinde revize edeceğiz.

ID’si 10 olan öğrencini isimi = Burcu, yaşı = 20 ve sınıfı = 2 olarak güncellenecektir.

PDO ile DELETE (Silme) İşlemi

Diğer işlemlerde kullanmadığımız bir method olan exec methodunu kullanarak kayıtları sileceğiz. Bu kodu tekil ya da çoklu kayıtları silmek için kullanabilirsiniz herhangi bir ayrım yapmanıza gerek yoktur.

Buradaki örnekte her id bir adet olabileceği için tekil kayıt silme işlemi yapmış olduk. Toplu silmek isteseydik örnek olarak yas = 20 dediğimizde yaşı 20 olan kayıtlar silinmiş olacaktı. Aynı şekilde eğer WHERE ve sonrasını silecek olursak bütün öğrencileri silecektik.

Yavaş Yavaş Kapanış

Yukarıda veritabanı ile yapmak isteyebileceğiniz çoğu işlemi sizlere PDO kütüphanesinde nasıl yapılacağını göstermeye çalıştım. Siz buradaki SQL kodlarını projeniz dahilinde genişleteceksiniz, buradaki örnekler sadece olayları kavrayabilmeniz için verilen basit kodlar oldu. SQL kodlarına ORDER BY, LIMIT, GROUP, JOIN gibi eklemelerinizi yaparak daha gelişmiş işlemler yapabilirsiniz.

Az daha PDO’yu nasıl sonlandıracağımızı söylemeden kapatıyorduk dükkanı. Aslına bakarsanız PDO üzerindeki bağlantımız standart mysql fonksiyonundan farklı olarak bir değişken üzerinde tutulduğundan veritabanını sonlandırmanız çok gerekli bir şey değil fakat sonradan erişilmemesi için büyük çaplı projelerde kaynak tüketimini azaltmak için işiniz bittikten sonra şu şekilde bağlantınızı sonlandırabilirsiniz.

Yukarıda verdiğim örnekleri herhangi bir tablo üzerinde denemeden editör üzerinden yazdım ve örnek olarak buraya aktardım. Bu yüzden ufak tefek hatalarım olmuş olabilir, gözünüze çarpan bir yer olursa yorum kısmından düzeltilmesi için bildirimde bulunabilirsiniz.

Bir Cevap Yazın