Ana Sayfa » »
Tem
24
2013

WordPress $wpdb Sınıfı: SELECT (Seçme) İşlemleri

WordPress veritabanı yönetim sistemi olarak ezSQL isimli veritabanı sınıfını, $wpdb değişkeni üzerinden kullanıyor. Eğer bir eklenti yazmayı düşünüyor ya da temanızda çeşitli veritabanı işlemleri yapmak istiyorsanız, bu sınıfın fonksiyonlarını kullanmak size hem zaman hem de güvenlik kazandıracaktır. Sınıfın inceleyeceğimiz ilk fonksiyonları, seçme işlemi ile ilgili fonksiyonları.

Bu fonksiyonlar kullanım yerlerine göre $wpdb->query(), $wpdb->get_results(), $wpdb->get_row(), $wpdb->get_col() ve $wpdb->get_var() fonksiyonlarıdır. Şimdi bu fonksiyonları örneklerle birlikte inceleyelim.

prepare() Fonksiyonu ile Önce Güvenlik

Bu fonksiyon SQL cümlelerimizi oluştururken SQL injection denilen, veritabanına zararlı kod enjekte etme saldırılarına karşı, SQL cümlelerimizi korur. Bu nedenle SQL cümlelerimizi bu fonksiyonu kullanmak güvenliği artıracaktır. Fonksiyonun yaptığı iş aslında basit, SQL cümlenize değişkenlerinizi türlerine uygun olarak yerleştirmek, aynı zamanda içerisindeki çalıştırılabilir kodları zararsız hale getirmektir. Aşağıda genel bir kullanımı var.

$sql = $wpdb->prepare( "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( %d, %s, %f )", 15, 'imdb_puani', 8.7 );
//$sql değişkeninin değeri aşağıdaki gibi olacaktır:
// $sql = INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value ) VALUES ( 15, 'imdb_puani', 8.7 )

//sorguyu çalıştır 
$kayitid = $wpdb->query($sql);

Fonksiyonun ilk bölümünde SQL cümlemizi yazıyoruz, içerisinde sayısal değerler için %d, metinsel (string) değerler için %s ve ondalıklı (float) değerler için ise %f ifadelerini kullanıyoruz, fonksiyonun ikinci kısmında ise bu ifadelerin her biri yerine hangi değer gelecekse onu yazıyoruz, tabi ki sadece değer değil, örneğin 15 yerine $post->ID gibi değişkenler de kullanabilirsiniz.

Bu fonksiyonu özellikle query() ve get_results() fonksiyonlarını kullanarak genel sorgulama yapmak istediğinizde kullanmanızı şiddetle tavsiye ediyorum. Şimdi seçme işlemlerinin nasıl yapıldığına bakabiliriz.

query() Fonksiyonu ile Seçme İşlemi

query() fonksiyonu, $wpdb sınıfının genel sorgulama fonksiyonudur. Yani sadece seçme değil aynı zamanda, ekleme, silme, güncelleme vb. tüm SQL sorgularınızı işletmek için kullanabileceğiniz bir fonksiyondur. Seçme işlemi için aşağıdaki şekilde fonksiyonu kullanabilir ve gelen sonuçları değerlendirebilirsiniz.

<?php
   $posts = $wpdb->query("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future' AND post_type='post' ORDER BY post_date ASC LIMIT 0,10")
//Size ödev, sorguyu prepare() fonksiyonu ile nasıl yazabilirdik?

   // Zamanlanmış yazılardan yayınlanacak ilk yazının başlığını yazdırır
   echo $posts[0]->post_title;

   // Eğer bu yazıları liste şeklinde yazdırmak isterseniz de
   if ($post) {
     echo '<ul>';
     foreach ($posts as $post) {
        echo '<li>' . $post->post_title . '</li>';
     }
   }
?>

Gördüğünüz gibi wp_posts tablosundaki zamanlanmış ve yayınlanacak ilk 10 yazıyı seçip, kullanmak bu kadar kolay. SQL sorgusunda wp_posts yerine $wpdb->posts değişkenini kullanırsanız, sitenin wp-config.php dosyasında belirtilen $prefix değişkenine göre wp_posts tablosuna ulaşmış olursunuz.

get_results() Fonksiyonu ile Seçme İşlemi

Sınıfın seçme işlemleri için kullanılan esas fonksiyonudur. Kullanımı query() fonksiyonuyla aynı olup, sadece SQL cümlenizi parametre olarak vermeniz yeterli. Gelen sonuç nesne türünde olup, yine yukarıdaki örnekte olduğu gibi değerleri alıp, kullanabilirsiniz.

<?php
   $posts = $wpdb->get_results("SELECT ID, post_title FROM wp_posts WHERE post_status = 'future'
   AND post_type='post' ORDER BY post_date ASC LIMIT 0,4")

   // zamanlanmış yazıların ilkinin başlığını yazdır
   echo $posts[0]->post_title;

   // aşağıdaki şekilde etkilenen kayıt sayısını yazdırmak mümkün
   echo $wpdb->num_rows;
?>

get_row() Fonksiyonu ile Tek Satırlık Bilgiyi Seçme İşlemi

Yazdığınız sorgu sonucunda sadece bir satırlık bilgi dönmesi gerekiyorsa, bu fonksiyonu kullanmanız yerinde olacaktır. Aşağıdaki örnekte SQL sorgusu sonucunda tek bir yazının bilgileri gelecektir.

<?php
   //Aşağıdaki SQL cümlesi en çok yorumlanan yazının bilgilerini getirir.
   $post = $wpdb->get_row("SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'publish' AND post_type='post' ORDER BY comment_count DESC LIMIT 0,1")

   //En çok yorumlanan yazının başlığını yazdır.
   echo $post->post_title;
?>

Örnekten de anlaşılacağı üzere fonksiyon sonucunda dönen değer tek boyutlu bir değişkene aktarılıyor, yani query() ya da get_results() fonksiyonlarından farklı olarak döngü kullanmadan dönen değeri doğrudan yazdırabilirsiniz.

get_col() Fonksiyonu ile Tek Bir Sütunu Seçme İşlemi

Bu fonksiyon, get_row() fonksiyonuna benzerdir ancak onun aksine bu fonksiyon sütunları döndürür. Aşağıdaki örnekte en çok yorumlanan 10 yazının sadece başlıkları çekilmiştir.

<?php
   $posts = $wpdb->get_col("SELECT post_title FROM wp_posts WHERE post_status = 'publish'
   AND post_type='post' ORDER BY comment_count DESC LIMIT 0,10")

   // 3. yazının başlığını yazdırır
   echo $posts[3]->post_title;
?>

get_var() Fonksiyonu ile Bir Değeri Seçme İşlemi

Bazı durumlarda veritabanından sadece tek bir değeri almak gerekebilir. Bu durumda get_var() fonksiyonunu kullanabilirsiniz. Fonksiyon ile dönen değerin veri türü neyse, değerin aktarıldığı değişkenin türü de o olur.

<?php
   $email = $wpdb->get_var("SELECT user_email FROM wp_users WHERE user_login = 'yonetici' ")

   // Echo the user's email address
   echo $email;
?>

Yukarıdaki örnek yonetici kullanıcının e-posta adresini getirir.

Sonuç Olarak

Fonksiyonları, istediğinize ve ihtiyacınıza uygun olarak kullanmanız, bellek ve kaynak tüketimini azaltacak bununla birlikte güvenliğinizi artıracaktır. Eğer bu fonksiyonları kendinize ait bir fonksiyon içerisinde kullanacaksanız, fonksiyon tanımından sonra global $wpdb; satırını ekleyerek, $wpdb değişkenini globalleştirmeniz gerekir, aksi halde fonksiyonlara ulaşamazsınız.

Bu yazımı beğendiyseniz, bu kategoride yer alan RSS Beslemelerinde Sayfaları da Gösterelim başlıklı besleme, functions.php ve RSS konularında bilgi veren bir önceki yazımı da okumanızı tavsiye ederim.

Yorumunu Yaz

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yukarı Çık