PDO (Php data objects)

Eskiden veritabanı işlemleri için kullandığımız mysql_connect vb fonksiyonların artık yavaş yavaş devri kapanıyor.Onun yerine kullanmamız için PDO veya MySQLi fonksiyonları tavsiye edilmektedir.Burada PDO hakkında kısa bilgi ve nasıl kullanıldığına dair bu makale yazıyorum.

PDO nedir ? 

Temelinde “object oriented programming” arayüzüne sahiptir.Birçok veritabanı türünü destekler örnek vermek gerekirse ;

  • PostgreSQL
  • MySQL
  • Oracle
  • SQLite

Nasıl aktif edilir ?

Öncelikle sürücü desteğini php.ini dosyasında bularak önlerinde ; işaretlerini kaldırmamız gerekiyor.Aşağıdaki dosyaları php.ini içerisinde aratıp önlerinde bulunan ; işaretini kaldırmalıyız.

  • extension=php_pdo.dll
  • extension=php_pdo_mysql.dll
  • extension=php_pdo_sqlite.dll

Nasıl veritabanı bağlantısı yapılır ?

$dsn = 'mysql:host=localhost;dbname=test';
$user = 'root';
$password = '123456';
 
try {
 $db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
 echo 'Bağlantı hatası: ' . $e->getMessage();
}

Benim araştırırken gördüğüm ve kullanırken tercih ettiğim kullanım şu şekildedir.Bu tanımlama ile veritabanı bağlantısını yaparız.Try catch içinde kullanmak kullanışlıdır çünkü hata oluştuğunda catch ile hata mesajını döndürürüz.Eğer bağlantı için port adresi istenirse $dsn = ‘mysql:host=localhost;port=2302;dbname=test’ diye tanımlama yaparız.Varsayılan post adresi 3306’dır.

$db = new PDO($dsn, $user, $password,
 array(
 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
 PDO::ATTR_ERRMODE => PDO:ERRMODE_EXCEPTION
));

Sorgularda prepare() metodunun önemiBağlantı satırımda veritabanı ile ilgili özellikleri array tanımlaması yaparak böyle belirttim.Ayrıca başka yerde de set names utf8 tanımlaması yapılabilmektedir.Kodun geri kalan kısmı ilk gösterdiğim kullanım ile aynıdır.

PDO kullanırken prepare() metodu ile çalıştırılmak üzere bir SQL deyimi hazırlar.Metot bind_param(),execute(),bindColumn(),bindValue() metotları ile birlikte çalışır.Avantajları ;

  • SQL sorgusunu bir kez yorumlar ve birçok kez çalıştırma imkanı sağlar.
  • Yapısında temizleyici bulunur.Dolayısıyla SQL injection önlenir.
  • Daha hızlıdır.

prepare() kullanımı

PDO ile veritabanı bağlantısı yaptıktan sonra sorgu işlemlerine geçebiliriz.

$dsn = 'mysql:host=localhost;dbname=test';
$user = 'root';
$password = '123456';
 
try {
 $db = new PDO($dsn, $user, $password,array(
 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
 PDO:ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
 ));
 $sonuc = $db->prepare("INSERT INTO uye VALUES(?,?,?)");
 $sonuc->bindParam(1,$_POST['ad'],PDO::PARAM_STR);
 $sonuc->bindParam(1,$_POST['sifre'],PDO::PARAM_INT);
 $sonuc->bindParam(1,$_POST['email'],PDO::PARAM_STR);
 echo ($sonuc == TRUE) ? 'Kayıt Başarılı' : "Kayıtta hata oluştu.";
 $sonuc->execute();
 $db = null;
} catch (PDOException $e) {
 echo 'Hata oluştu: ' . $e->getMessage();
}


PDO ile sorguları geri alabiliyoruz nasıl mı ?
Şeklinde kayıt işlemini gerçekleştiririz.SQL ile yapılabilecek select,update,delete gibi fonksiyonlarıda bu şekilde yapabiliriz.

Öncelikle $db->beginTransaction(); metodunu çağırarak geri alma işlemi yapabileceğimiz sorguları yazmaya başlarız.Bu komuttan sonra yazacağımız select,insert,update,delete gibi komutlar normal şekilde çalışmaktadır.Eğer herhangi zamanda geri alma işlemi yapmak istiyorsak $db->rollback() metodunu çağırarak bu komuta kadar olan işlemleri geri almış oluruz.DELETE sorgusu ve UPDATE sorugusu ile yaptığımız işlemleri geri alabilmekteyiz.Bu işlemleri çalışması için en sonra $db->commit() metodunu çağırarak işlemlerimizi tamamlamış oluruz.

$db->beginTransaction();//başlatma metodu
$db->prepare('DELETE FROM uyeler WHERE uye_id = '52'');
$sonuc = $db->execute();
if($sonuc == FALSE){
   $db->rollBack();//işlemler geri alındı.
   echo "hata oluştu.işlemler geri alındı";
}else {
   $db->commit();
}

İlk yazımı burada noktalıyorum.Eğer yazıda herhangi bir hata görürseniz veya yazıya eklenmesi gereken bilgi varsa lütfen yorum atarak belirtiniz.PDO ile ilgili yeni güzel özellikler görürsem ekleme çıkarma yapmaya çalışacağım.

Yazıyı yazarken faydalandığım kaynaklar:

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s