Jun
09
2010

Neden PDO Kullanmalıyız – Esneklik

Evet, nerde kalmıştık. Esneklik ile kastettiğim şeyi açıklayabilmek için bir örnek hazırladım. Örneği buradan indirebilirsiniz.

Bu örnek ile yapmaya çalıştığım şey, kodda yapısal hiçbir değişikliğe gitmeden 2 farklı veritabanını kullanabilen bir uygulama yapabilmekti.

Kolay ve bilinen bir örnek olarak , basit ötesi bir ziyaretçi defteri oluşturdum. Bu ziyaretçi defteri hem sqlite hem de mysql destekliyor. Bunu PDO sayesinde yapabiliyor.

Bildiğiniz gibi PDO aşağıdaki veriatabanlarına destek veriyor :
* MS SQL Server (PDO) — Microsoft SQL Server ve Sybase (PDO_DBLIB)
* Firebird/Interbase (PDO) — Firebird/Interbase (PDO_FIREBIRD)
* IBM (PDO) — IBM (PDO_IBM)
* Informix (PDO) — Informix (PDO_INFORMIX)
* MySQL (PDO) — MySQL (PDO_MYSQL)
* Oracle (PDO) — Oracle (PDO_OCI)
* ODBC and DB2 (PDO) — ODBC ve DB2 (PDO_ODBC)
* PostgreSQL (PDO) — PostgreSQL (PDO_PGSQL)
* SQLite (PDO) — SQLite (PDO_SQLITE)
* 4D (PDO) — 4D (PDO_4D)

PDO (Php Data Object) bir arayüz sunarak, bu arayüzü destekleyen sürücüleri ile birlikte veritabanı üzerinde işlem yapılmasını sağlıyor. Bütün işlemler PDO üzerinden yürütüldüğü için kodda herhangi bir yapısal değişikliğe gidilmiyor, yani tek satır yeni kod yazmadan (sadece parametre değişikliği ile) birden fazla veritabanını ile çalışabilen bir uygulama mümkün oluyor.

Örneğimizin çalışabilmesi için testdb adında bir mysql veritabanı oluşturun. Bu veritabanı üzerinde, dosyalar içerisinde bulunan, schema.txt dosyasındaki mysql kodunu çalıştırın :

CREATE TABLE `defter` (
`id` INTEGER AUTO_INCREMENT,
`konu` VARCHAR(100),
`mesaj` TEXT,
`yazar` VARCHAR(32),
`eposta` VARCHAR(32),
PRIMARY KEY (`id`)
)
ENGINE = MyISAM
CHARACTER SET utf8 COLLATE utf8_general_ci;

Kodları web sunucunuza açın. Dosyalar arasındaki sayfa.php de bulunan şu satıra gidin

1
2
3
4
5
6
7
8
9
10
11
   public function __construct(){
      /**
       *  mysql dsn
       *  'mysql:dbname=testdb;host=127.0.0.1'
       *  
       *   sqlite dsn
       *   'sqlite:sqlite-defter.db'
       */

     
      $this->defter=new Defter('sqlite:sqlite-defter.db');
   }

Burada veritabanı işlemleri yapmamıza (defeteri okuyup yazmamıza) olanak sağlayan sınıfımızın ( Defter ) alacağı parametreler görülmekte.
Hiçbir değişiklik yapmadan ve PDO_SQLite sürücüsü aktif iken testi çalıştırırsanız SQLite destekli bir ziyaretçi defteri çalıştırmış olursunuz.

Bu ziyaretçi defterini mysql ile kullanmak isterseniz yapmanız gereken tek şey Defter sınıfının kurucusuna verilen parametreyi değiştirmek :

1
    $this->defter=new Defter('mysql:dbname=testdb;host=127.0.0.1','kullanici-adi','sifre');

Evet, hepsi bu. Sadece parametre değişikliği ile bu esnekliği sağlıyoruz. Burdaki parametre PDO nesnesinin ilgili veritabanı sürücüsünü yüklemesi için gereklidir.
Bunu PDO’suz da yapabilirdik, ama kodları incelediÄŸinizde PDO’nun gücünü daha iyi anlayacaksınız.

Tabi herşey bu ziyaretçi defterindeki gibi kolay olmuyor, her veritabanı kendine has özelliklere sahip ve bu özellikler geçiş esnasında sıkıntılar yaşatabilir.
Ama eğer ara katman düzgün planlanmış / yazılmışsa , sadece veriatabanı /SQL değişiklikleri ile kodda çok fazla değişikliğe gidilmeden ( hatta bu örnekte olduğu gibi sadece DSN değişikliği ile ) geçiş yapmak mümkün olabilir.

Yaziyi gonderen Ersin in: Php Web Programlama | Etiketler:

4 Yorum »

  • adı bende saklı says:

    güzel yazı bakış açım deÄŸiÅŸti….
    ezsql sınıfı mı iyi pdo mu?
    nasıl bir fark var …

  • Ersin says:

    Ezsql PHP kodları ile oluşturulmuş bir kütüphane ama PDO, PHP ye ait bir kütüphane C ile yazılmış , derlenmiş bir eklentidir. Ezsql bile PDO kullanıyor olabilir.
    PDO kullanmanızı öneririm.

  • araÅŸtırmalarımda ezsql ile pdo kullanabilceÄŸimi gördüm, pdo yu deneyeceÄŸim , derslerin devamını beklerim..
    Elinize sağlık
    http://www.woyano.com/view/213/Download-ezSQL-Database-Class-204

  • Nurettin says:

    Daha önce hiç pdo kullanmayı düşünmemiştim. Güzel özellikleri var. Sanırım framework lerde bu ssitem mevcut.

RSS feed for comments on this post. TrackBack URL


Yorum yaz

Powered by WordPress | conserio | xoppla | TheBuckmaker