30 Mar

PDO (PHP Data Objects) nedir

“PHP Data Objects (PDO) eklentisi PHP içerisinde veritabanlarına erişim için küçük, kararlı bir arayüz tanımlar. PDO arayüzünü implemente eden herbir veritabanı sürücüsü kendi eklentilerindeki veritabanına has özelliklerini kullanılabilir hale getirirler. PDO eklentisinin kendisi ile herhangi bir veritabanı işlevi yerine getiremezsiniz. Veritabanına erişmek için veritabanına has PDO sürücüsünü kullanmalısınız.

PDO veri-erişim katman soyutlaması sunar, yani kullandığınız veritabanı ne olursa olsun sorgu ve veri çekmek için aynı fonksiyonları kullanırsınız. PDO veritabanı soyutlaması sağlamaz; SQL in yeniden yazılması değildir, veya eksik özelliklerin tamamlanması değildir.” ***(php.net)

Php kendi sayfasında tanımladığı biçimiyle ve benim bedbahd ingilizcemin yettiği kadarıyla çevirisi bu biçimde. Şimdi durumu sadeleştirmek gerekirse. PHP nin Nesne Yönelimli Programlamaya ağırlık verdiği 5 sürümü ile gelen PDO bir veri erişim katmanıdır, PDO interface ini implemente ederek oluşturulmuş sürücülerini kullanarak standart bir veri erişim modeli oluşturmaktadır. PDO da standard fonksiyonlar vardır: exec,query,fetch v.b. Bu fonsiyonlar sürücü desteği bulunan bütün veritabanları için aynıdır.
Örneğin MySql e sorgu yapmak için PDO->query() metodu kullanılacaksa firebird,PgSql veya Oracle (PDO interface ini implemente ederek oluşturulmuş birkaç sürücü daha mevcuttur: IBM,Informix,SqLite,Sybase,MicrosoftSQL,ODBC) içinde aynı metod kullanılacaktır. Bu da bize farklı veritabanları kullanmamız gerektiği zaman bunların PHP için olan eklentilerine dalıp farklı fonksiyonları içerisinde kayolmamızın önüne geçmekte. Tabi sağladığı yararlar bununla sınırlı değil, ileride kullandıkça örneklerimizdeki açıklamalarla sağladığı faydalar daha net anlaşılabilir.

PDO 5.1 sürümü ile kullanılmaya başlamıştır. PDO yu kullanabilmek için  php.ini dosyasındaki PDO yu etkinleştirmelisiniz bununla birlikte veritabanına has olan PDO sürücüsünü de etkinleştirmelisiniz. Yoğun biçimde MySql kullanıldığı için biz MySql eklentisini etkinleştireceğiz, bunun için php.ini ye şu satırları ekleyebilirsiniz
[PHP_PDO]
extension=php_pdo.dll
[PHP_MYSQL]
extension=php_mysql.dll

Bu adımdan sonra bir örnek ile PDO kullanımını açıklayalım:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
try {
/**
* PDO __construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
*
**/

$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach ($dbh->query('SHOW DATABASES') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Hata!: " . $e->getMessage() . "
"
;
die();
}
?>

Yukarıdaki örneği açıklayalım. PDO kurucusunda bulunan “dsn” parametresi PDO nun hangi veritabanı sürücüsünü kullanacağını belirlemesine yardımcı olan veriyi barındırır. Burada “mysql” yerine “mssql” veritabanına bağlanmak isteseydik “dsn” imiz şöyle olacaktı: ‘mssql:host=localhost;dbname=test’. Bu durumda PDO MsSql sürücüsünü arka planda yükleyecekti (tabi MsSql sürücüsünü öncelikle sizin aktif etmiş olmanız şartıyla).

Burada PHP de daha önce olmayan ve 5. versiyonu ile gelen “try catch” bloğundan bahsetmek gerekecek sanırım.  “try catch” bir hata yakalama ve oluşan hatayı göz ardı etme mekanizmasıdır diyebiliriz kabaca. İki bloktan oluşan bu yapı ile ulaşılmaya çalışılan sağlamlıktır. Uygulamada bir hata gerçekleştiğinde oracıkta sonlanmak yerine size bu hatayı yönetebilmenize olanak sağlar.

Örneğimizdeki “try catch” bloğuında PDO kurucusu sağlıklı çalıştığında ve veritabanı bağlantısını sağladığında “try” bloku çalışacak ve sorgu sonucu yazılacak ekrana. Bir hata meydana geldiğinde ise “catch” bloğu çalışacak ve meydana gelen hata ekrana yazılcaktır.

PDO ile ilgili örneklere ve PHP5 yeniliklerine ilerleyen zamanlarda değinilecektir. Bol güneşli bahar günleri dilerim…