Sınıfın özellikleri
PDO zaten kendi halinde tüm temel isteklere cevap verecek metodlara sahip. Bu sınıfın metodlarını hazırlarkende bir kaç satır kod kullandığımı görebilirsiniz. Artıları nedir derseniz;
Öncelikle her sınıfın sağladığı pratikliği sağlıyor. Herhangi PDO bağlantı terimiyle uğraşmadan dosyaları uygulamanıza ekleyip ayar dosyasındaki sabitlerden veritabanı bilgilerini girip kullanmaya başlayabilirsiniz.
Sınıf singleton pattern yapısına sahip ve aynı zamanda statik olduğu için uygulamanızın en başında bir değişkene atanma ya da uygulama başlar başlamaz veritabanına bağlanma ihtiyacı duymaz. Örneğin uygulamanızda içerikleri cache ile sakladınığınızda ve yanlızca belirli dakikalarla veritabanından çekmek istediğinizde diğer zamanlarda gereksiz bağlantılar yapmamış olursunuz.
Bir satır bir satırdır. getVar, getRow gibi metodlar sayesinde tek bir satırda ihtiyacınız olan satır ya da verilere ulaşabilirsiniz.
Tüm içerik çeken metodlarında ikinci parametre olarak bindings değerlerini alıyor. Bu sayede yine bir kaç metod daha kısaltıyoruz.
Sorgulardan dönen tüm içerikler obje tipinde dönmesini sağlıyor. Değerleri daha hızlı yazıp daha temiz görmemizi sağlıyor.
Get metodu ile sorgunun tüm satırlarını arraya yüklenmiş bir şekilde alıyoruz. Elde ettiğimiz sonucu direkt cache yapabilir ya da foreach ile döndürebiliriz.
getLastError metodu ile daha pratik hata karşılayabiliyoruz.
Insert metodu direkt olarak eklenen satırın ID’sini veriyor.
Tüm bunların yanında deneysel ve olayları daha iyi kavrama amacıyla dizayn ettiğim bu sınıf sayesinde PDO’ya daha iyi hakim olabiliyorum.
Özetle sınıf; statik, pratik ve singleton. PDO kendi haliyle yeterli bile olsa elinizin altında bu tarzda bir sınıfınızın olması mutlaka işlerinizi daha da kolaylaştıracaktır.
PDO’nun kendisi[ACIKLAMA]
Sınıf PDO’dan extends edilmedi, fakat __callStatic sihirli metodu sayesinde sınıfa statik olarak yapılan her çağrı direkt olarak PDO’da çalışacak
[/ACIKLAMA]PDO zaten kendi halinde tüm temel isteklere cevap verecek metodlara sahip. Bu sınıfın metodlarını hazırlarkende bir kaç satır kod kullandığımı görebilirsiniz. Artıları nedir derseniz;
Öncelikle her sınıfın sağladığı pratikliği sağlıyor. Herhangi PDO bağlantı terimiyle uğraşmadan dosyaları uygulamanıza ekleyip ayar dosyasındaki sabitlerden veritabanı bilgilerini girip kullanmaya başlayabilirsiniz.
Sınıf singleton pattern yapısına sahip ve aynı zamanda statik olduğu için uygulamanızın en başında bir değişkene atanma ya da uygulama başlar başlamaz veritabanına bağlanma ihtiyacı duymaz. Örneğin uygulamanızda içerikleri cache ile sakladınığınızda ve yanlızca belirli dakikalarla veritabanından çekmek istediğinizde diğer zamanlarda gereksiz bağlantılar yapmamış olursunuz.
Bir satır bir satırdır. getVar, getRow gibi metodlar sayesinde tek bir satırda ihtiyacınız olan satır ya da verilere ulaşabilirsiniz.
Tüm içerik çeken metodlarında ikinci parametre olarak bindings değerlerini alıyor. Bu sayede yine bir kaç metod daha kısaltıyoruz.
Sorgulardan dönen tüm içerikler obje tipinde dönmesini sağlıyor. Değerleri daha hızlı yazıp daha temiz görmemizi sağlıyor.
Get metodu ile sorgunun tüm satırlarını arraya yüklenmiş bir şekilde alıyoruz. Elde ettiğimiz sonucu direkt cache yapabilir ya da foreach ile döndürebiliriz.
getLastError metodu ile daha pratik hata karşılayabiliyoruz.
Insert metodu direkt olarak eklenen satırın ID’sini veriyor.
Tüm bunların yanında deneysel ve olayları daha iyi kavrama amacıyla dizayn ettiğim bu sınıf sayesinde PDO’ya daha iyi hakim olabiliyorum.
Özetle sınıf; statik, pratik ve singleton. PDO kendi haliyle yeterli bile olsa elinizin altında bu tarzda bir sınıfınızın olması mutlaka işlerinizi daha da kolaylaştıracaktır.
PDO’nun kendisi[ACIKLAMA]
Sınıf PDO’dan extends edilmedi, fakat __callStatic sihirli metodu sayesinde sınıfa statik olarak yapılan her çağrı direkt olarak PDO’da çalışacak
HTML:
$posts = DB::query('SELECT * FROM posts');
foreach($posts as $post)
{
echo $post->title . '<br/>';
}
SQL Injection’a son
[ACIKLAMA]Neredeyse tüm amatör PHP ve MySQL projelerinde SQL injection açığı bulunuyor. Fakat PDO’nun binding özelliği sayesinde sorgu içerisindeki değişken değerler harici olarak dahil ediliyor ve kaçış karakterleri ekleniyor. Bu sayede bu basit açıktan da arınmış oluyoruz. Aşağıdaki sorguyu korkusuzca çalıştırabiliriz.[/ACIKLAMA]
HTML:
$post = DB::query('SELECT * FROM posts WHERE id = ?', array($_GET['id']));
Bindings (Hazır Deyimler) kullanımı
Yukarıdaki örnekteki query metodu PDO’nun binding özelliği ile birleştirdiğim bir metoddur. İlk parametresine sorguyu ikinci parametreye ise sorgu içerisinde “?” (soru işareti) ile ifade ettiğimiz yerlere gelecek değerleri vereceğimiz dizidir. Daha geniş bir binding örneği;
HTML:
DB::query(
'SELECT * FROM users WHERE id = ? AND name = ? AND email = ? LIMIT 1',
array($id, $name, $email)
);
Sınıfta PDO’nun veri çekme metodunu obje olarak belirledim. Yani çektiğimiz sonuçları bize varsayılan array tipinde değil obje olarak döndürecek.
Obje tipi ile yazması daha hızlı ve görüntüsü daha hoş. Örneğin;
HTML:
// Obje tipi ile
echo $user->name;
// Array tipi ile
echo $user['name'];
ALINTIDIR.