01 Temmuz 2007

ezSQL Veritabanı Sınıfı

Tasarım ve Programlama, WordPress Yorum Ekle

$db->get_row --Veritabanından ya da önbellekteki sonuçlardaki bir kayıdı alır.
Açıklama
$db->get_row(string sorgu / null [, OBJECT / ARRAY_A / ARRAY_N [, integer satır_indeks]])
Veritabanından ya da önbellekteki sonuçlardan bir kaydı alıp, kullanmayı sağlar. Eğer birden fazla kayıt varsa, ilk kaydı varsayılan olarak alır. Ayrıca başka ezSQL fonksiyonlarında kullanmanız için alınan sonuçlar önbelleğe depolanır.
Örnek:
// Veritabanından bir kullanıcının adını ve mail adresini alır ve bu değerleri user isimli bir nesneye aktarır
$user = $db->get_row("SELECT name, email FROM users WHERE id = 22") ;
// Değerleri görüntüle
echo "$user->name isimli kullanıcının e-maili $user->email";
Çıktı:
Mehmet isimli kullanıcının e-maili mehmet@foo.com

PHP:
  1. // Kullanıcı ve kayıt tarihini alır ve associative array (bağlı diziler) olarak birleştirir
  2. $user = $db->get_row("SELECT name, UNIX_TIMESTAMP(my_date_joined) as date_joined FROM users WHERE id = 22",ARRAY_A) ;
  3. // Sonuçları görüntüle
  4. echo $user['name'] . " isimli kullanıcının kayıt tarihi  " . date("m/d/y",$user['date_joined']);

Çıktı:
Mehmet isimli kullanıcının kayıt tarihi 05/02/01

PHP:
  1. // Önbellekteki ikinci kaydı al
  2.  $user = $db->get_row(null,OBJECT,1) ;
  3. // Not: Satır indeksi 0'dan başlar
  4. echo "$user->name joined us on " . date("m/d/y", $user->date_joined);
  5.  
  6. // Bir kaydı numerical array (sayısal dizi) olarak alır
  7. $user = $db->get_row("SELECT name,email,address FROM users WHERE id = 1", ARRAY_N);
  8. // Sonuçları bir tablo olarak görüntüle
  9.  
  10. echo "<table>";
  11. for ( $i=1; $i <= count($user); $i++ )
  12.      {
  13.         echo "<tr><td>$i</td><td>$user[$I]</td></tr>";
  14.       }
  15. echo "</table>";

Çıktı:

1. Mehmet
2. mehmet@foo.com
3. 555 Foo caddesi
$db->get_result --Veritabanından ya da önbellekteki sonuçlardan birden fazla kaydı alir.
Açıklama
$db->get_result(string sorgu / null [, OBJECT / ARRAY_A / ARRAY_N])
Veritabanından bir sorgu sonucu elde edilen değerleri alıp, dizi haline getirir. Dizideki her element bir satırlık sonucu saklar. Diziler object (nesne), associative array (bağlı dizi) ya da numerical array (sayısal dizi) olabilir. Eğer sorgu sonucunda herhangi bir değer elde edilemezse, fonksiyon false değerini döndürür. Listeleme işlemlerinde çok kullanışlıdır.
Örnek:
1- Sonuçlar object (nesne) olarak alınıyor (varsayılan durum).
Sonuçların nesne olarak alınması, sonuçları görüntülemek ve almak için en hızlı yoldur.

PHP:
  1. // Sonuçları $users dizisine aktarır (eğer hiçbir sonuç elde edilemezse bu da kontrol edilir)
  2. if ( $users = $db->get_results("SELECT name, email FROM users") )
  3.    {
  4.        //$users[n] dizisi bir döngü içerisine alınır ve satır satır okunup $user değişkenine aktarılır.
  5.  
  6.        foreach ( $users as $user )
  7.           {
  8.            // Verilere associative array (bağlı diziler)'de olduğu gibi sütun (alan) isimleriyle ulaşılır
  9.            echo "İsim: $user->name Mail Adresi: $user->email<br />";
  10.           }
  11.      }
  12. else
  13.      {
  14.        // Eğer kullanıcı bulunmazsa
  15.       echo "Hiç kullanıcı yok";
  16.       }

2- Sonuçlar associative array (bağlı dizi) olarak alınıyor.
Sonuçları bağlı dizi olarak almak özellikle sütunlara, sütun isimleriyle, dinamik olarak ulaşmak istediğinizde yararlıdır.

PHP:
  1. // Sonuçları $dogs dizisine bağlı dizi olarak aktar
  2. if ( $dogs = $db->get_results("SELECT breed, owner, name FROM dogs", ARRAY_A) )
  3.     {
  4.          // $dogs[n] dizisini döngüye alıp, satır satır oku
  5.          foreach ( $dogs as $dog_detail )
  6.                       {
  7.                           // Sonuç dizisini döngüye al
  8.                           foreach ( $dogs_detail as $key => $val )
  9.                                 {
  10.                                       // Veriyi $key ve $val değişken çiftini kullanarak al ve biçimlendir
  11.                                       echo ucfirst($key) . ": $val<br />";
  12.                                     }
  13.  
  14.                          }
  15.     }
  16. else
  17.     {
  18.         echo "Köpek bulunamadı.";
  19.     }

Çıktı:
Breed: Boxer
Owner: Amy
Name: Tyson

Breed: Labrador
Owner: Lee
Name: Henry

PHP:
  1. // Sonuçlar numerical array (sayısal dizi) olarak alınıyor
  2. // Sonuçlar sayısal diziye alınıyor
  3. if ( $dogs = $db->get_results("SELECT breed, owner, name FROM dogs", ARRAY_N) )
  4.     {
  5.          // $dogs[n] dizisini döngüye alıp, satır satır oku
  6.          foreach ( $dogs as $dog )
  7.                       {
  8.                           echo "Cinsi: $dog[0] Sahibi: $dog[1] Adı: $dog[2] <br>";
  9.                       }
  10.    {
  11. else
  12.   {
  13.          echo "Hiç köpek bulunamadı";
  14.   }

Çıktı
Cinsi: Boxer Sahibi: Amy Adı: Tyson
Cinsi: Labrador Sahibi: Lee Adı: Henry

Yazıyı Paylaş: Aşağıdaki simgeler kullanıcılarının web sitelerini paylaştığı ve yeni web sitelerini keşfettiği sitelere gider.
  • Oyyla
  • del.icio.us
  • Technorati
  • Bagcik
  • BlinkList
  • blogmarks
  • Bumpzee
  • Digg
  • feedmelinks
  • Furl
  • Tusul
  • Yumiyum
  • 100puan
  • Limk

Sayfalar: 1 2 3 4 5


Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=65.

Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.


“ezSQL Veritabanı Sınıfı” yazısı için 29 Yorum

Bu yazıya yapılan yorumları dilerseniz, ( RSS 2.0 ) beslemesini kullanarak takibe alabilirsiniz.

  1. Muharrem ERİN dedi ki:

    Merhabalar. ezSQL isimli sınıfı bir projemde kullanıyorum ama bir sorunla karşılaştım. utf8_general_ci ile oluşturduğum veritabanımda, gene utf8 ile kodlanan sayfamdan veri eklediğimde Türkçe karakterlerde problem yaşıyorum. WordPress'de bu sınıf modifiye edilerek kullanılmış ve gerekli ayarlar yapılarak Türkçe karakterlerdeki problem çözülmüş. Ancak ben bir türlü bu problemi aşamadım. Bir çözüm yolu biliyorsanız anlatabilir misiniz?

    Şimdiden teşekkürler. :)

  2. Yakup Gövler dedi ki:

    WordPress'in dışında başka bir projede kullanmadığımdan böyle bir problemin varlığından haberim yoktu. Ceviz forumda yaptığım aramada aşağıdaki koda ulaştım ve bende başarılı oldu.
    Veritabanı nesnenizi oluşturduğunuz satırın hemen altına bunu ekleyin, yani kodlarınız aşağıdaki gibi görünmesi lazım.
    $db = new ezSQL_mysql('root','','deneme','localhost');

    define('DILADI', 'utf8');
    define('DILKARSILASTIRMASI','utf8_turkish_ci');
    $db->query("SET NAMES '". DILADI. "'");
    $db->query("SET CHARACTER SET " . DILADI);
    $db->query("SET COLLATION_CONNECTION = '". DILKARSILASTIRMASI ."'");

  3. Muharrem ERİN dedi ki:

    Çok teşekkür ediyorum. Denedim ve oldu. Karakter kodlamasını tanımlamayı düşündüm ama nerede kullanacağımı bilmiyordum. Tekrar tekrar teşekkür ediyorum. Bugün bütün gün kafamı ağrıtmıştı. Nasıl teşekkür etsem azdır :)

  4. Yakup Gövler dedi ki:

    Rica ederim, ben de birşeyler öğrendim. :lol:

  5. Muharrem ERİN dedi ki:

    Merhabalar sayın hocam, gene bir problem yaşadım ve sizi rahatsız ettim. ezSQL ile herhangi bir recursive sorgu yaptığımda sorgu sonlanmıyor ve istediğim de olmuyor. Kodum şu şekilde:


    function page_tree_list($page_id) {
    global $db;
    $pages = $db -> get_results("SELECT id, page_id, title FROM "._SQLPREFIX_."pages WHERE page_id = '$page_id' ORDER BY line ASC");
    echo '';
    foreach ($pages as $page) {
    echo ''.$page -> title.'';
    page_tree_list($page -> page_id);
    }
    echo '';
    }

    Ama normalde kendim bir sorgu yazdığımda problemsiz döngü sonlanıyor.

    Eğer bu konuda bir bilginiz varsa yardımcı olabilirseniz sevinirim.

    Görüşmek üzere...

  6. Muharrem ERİN dedi ki:

    Afedersiniz galiba yukarıdaki yazım pek :?:

  7. Muharrem ERİN dedi ki:

    Afedersiniz klavyeme çay döküldü, tam yorum yazarken telaşa verdim eksik gönderdim, silebilirseniz sevinirim.

    Recursive fonksiyon ile ilgili eksik bilgi verdim galiba.

    Eğer sayfa herhangi bir sayfaya bağlı değilse page_id alanı 0 değerinde. Ama herhangi bir sayfaya bağlı ise page_id değeri bağlı bulunduğu sayfanın id'sine eşit.

    Yani fonksiyonumuzu
    page_tree_list(0);
    şeklinde çağırdığımızda buna benzer bir sonuç çıkması gerek:

    Kök sayfa 1
    - Sayfa 1 - 1
    - Sayfa 1 - 2
    -- Sayfa 1 - 1 - 2
    Kök Sayfa 2
    - Sayfa 2 - 1
    -- Sayfa 2 - 1 - 1
    -- Sayfa 2 - 1 - 2
    - Sayfa 2 - 2
    - Sayfa 2 - 3

    Ama yukarıda yazdığım gibi sorgu sonuçlanmıyor.

    Ayrıca yukarıda kodda ul ve li tagları çıkmamış.

    Yardımlarınızı bekliyorum, teşekkürler.

  8. Yakup Gövler dedi ki:

    İlk bakışta bir hata yok gibi görünse de sorgunuza daha dikkatli baktığımda, sorgu sonucunda sonsuz döngü oluşuyor gibi geldi bana. Şöyle ki;
    Fonksiyona ilk girdiğinde page_id=0 olanlardan birincisini aldı, dolayısıyla $page => page_id = 0 olur ve tekrar fonksiyona 0 değeri gönderilir. Acaba yanlış mı düşünüyorum?
    Çözüm döngü içerisindeki page_tree_list($page -> page_id); ifadesini page_tree_list($page -> id); yapmanız olabilir.

  9. Muharrem ERİN dedi ki:

    Aaa evet, nasıl oldu da gözümden kaçtı..

    Hızlı cevap için teşekkürler Hocam.

    Veriler listeleniyor ama, döngünün sonlandığı her noktada şu hatayı alıyırum:
    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\root\card\admin\do_act\pages\new.php on line 20

    20. satırdaki kodumuz ise;
    foreach ($pages as $page) {

  10. Yakup Gövler dedi ki:

    Sorgu boş döndüğünde for each döngüsü hata verecektir. Malum bilgi yoksa atama da yok, atama yoksa döngü de yok.
    Bir if ile sorgunun boş olup olmadığını kontrol etmelisiniz.
    if ($pages) {
    foreach ($pages as $page) {
    bla bla bla
    } //for sonu
    } // if sonu
    Böyle ya da buna benzer bir kod ile sorgunun sonucunu kontrol etmelisiniz.

  11. Muharrem ERİN dedi ki:

    İnanın çok yardımcı oldunuz. Geliştirmekte olduğum bir haber sisteminde kullanıyorum bu sınıfı. İki defa problem yaşadım ikisinde de çok yardımcı oldunuz. Biter bitmez size de göndermek isterim, incelemeniz ve yorum yapmanız hoşuma gider.

    Tekrar tekrar teşekküler :)

  12. Yakup Gövler dedi ki:

    Projenizin bitmesini sabırsızlıkla bekliyor olacağım. Kendinize iyi bakın, projenizde başarılar.

  13. Muharrem ERİN dedi ki:

    Çok teşekkürler :)

  14. Doç.Dr. Süleyman Tarman dedi ki:

    Merhaba,
    Siteme üye olanların verilerini mysql veri tabanında tutuyorum. Üyelerin çeşitli bilgileri yanında bir de e-posta adresleri var. Bu veritabanına sürekli eklemeler oluyor. Zaman zaman üyelerin veritabanında kayıtlı bulunan e-posta adreslerine toplu HTML mesaj göndermek istiyorum ancak bu konuda çok aramama karşın bir bilgi bulamadım. Yardımcı olabilir misiniz?

    Teşekkürler ve iyi çalışmalar.

  15. Yakup Gövler dedi ki:

    Süleyman Bey,
    PHP ve veritabanı bilginizin düzeyini bilmiyorum. Sitenize baktım, sanırım html ile tasarlanmış ama sanırım sizin üyelikten kastınız forumunuza üye olunması. Eğer böyleyse forumunuzun yönetim panelinde üyelere mail atma fonksiyonu olması lazım. Forum scriptleri ile aram iyi değil.
    Yok eğer php ve veritabanı bilginiz varsa bu durumda PHP'nin mail() fonksiyonunu incelemenizi öneririm.
    forum.ceviz.net adresinin php bölümünde sorunuzu sorarsanız ya da arama yaparsanız, html mail yollama ile ilgili bayağı bir konuya ulaşabilirsiniz.
    Ayrıca http://www.dmry.net/php-ile-mail-gondermek adresinden php ile mail yollama hakkında ayrıntılı bilgi bulabilirsiniz.

  16. Doç.Dr. Süleyman Tarman dedi ki:

    Tekrar merhaba. Konu, forum üyeliği ya da php ile e-posta yollamak değil. Amacım veri tabanında kayıtlı olan e-posta adreslerine -adresleri mysql'den almak kaydıyla- mesaj gönderecek yazılımı ya da scripti bulmak. Yine de yanıtınız için teşekkür ederim.

  17. Fatih dedi ki:

    Bu güzel döküman için teşekkürler.

  18. hasan iltemir dedi ki:

    Merhabalar hocam ez sql ile çalışıyorum fakat farklı bir class oluşturup o class içerisinde get_results yada başka ez sql fonksiyonlarını çağırınca..

    "Fatal error: Call to a member function get_results() on a non-object in"

    hatası veriyor ez_sql.php yi bu classı oluşturduğum dosyada tanımladım...
    iyi çalışmalar

  19. Yakup Gövler dedi ki:

    Fonksiyonlarınızda ezSQL sınıfını kullanmak için
    $db değişkenini fonksiyon içerisinde global olarak tanımlamanız gerekir. Tabi buradaki $db sizin ezSQL'i kullanımınıza göre değişebilir.
    Örnek:
    function deneme() {
    global $db;
    $db->get_results(...
    .
    .
    .
    }

  20. hasan iltemir dedi ki:

    Teşekkürler hocam 2. sayfada açıklamışsınız zaten.. :)
    kafama takılan bir nokta ise oluşturulan sorguları işi bitince kendisi yok ediyor
    mysql_free_result($sorgu); tarzında bir ekleme yapmaya gerek kalmıyor dimi?

  21. tufan dedi ki:

    ezSQL framework'une yeni başlıyorum. Bu konuda makaleniz gerçekten faydalı oldu elinize sağlık.
    Benim bir sorum olacak;
    mysql_fetch_assoc($id) ile database de girilmiş son id'yi alıyordum.
    Bunu ezSQL de nasıl yapacağımı bulamadım?
    Yardımcı olursanız sevinirim.
    Teşekkürler

  22. tufan dedi ki:

    foreach ( $db->get_col("SELECT uid FROM user order by uid desc limit 1",0) as $son )
    {
    echo $son+1;
    }

    şeklinde yaptım :)

  23. Günay Yılmaz dedi ki:

    rand() kullanımı nasıl peki ezSQL sınıfında ?

  24. WordPress’in Veritabanı Sınıfı ve Kullanımı · Yakup Gövler'in Not Defteri dedi ki:

    [...] Gerçekten güçlü bir sınıf olan ezSQL ile ilgili ayrıntılı bilgiye benim yazdığım makale'den ya da post2cat (post_id, category_id) VALUES (13, 2)"); ID'si 13 olan yazıyı siler. [...]

  25. Ertuğrul Erkan dedi ki:

    Merhaba hocam. Sql kodlarını sql.php ye post ediyorum ve çalıştırılmasını sağlayama çalışıyorum fakat şöyle bir hata alıyorum;

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"' at line 1 in C:\AppServ\www\sql\ez_sql_mysql.php on line 204
    \"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"

    burada slashlar var, onları temizletiyorum fakat yine hata alıyorum acaba sorun nedir? unutmadan;

    "insert into kelimeler(sozcuk,karsilik)values('ceo','yonetici')"

    bu kodu post ediyorum sayfaya ve $db->query($_POST["sql"]); şeklinde çalıştırmaya çalışıyorum :/

  26. Yakup Gövler dedi ki:

    @Ertuğrul, muhtemelen sunucunuzda magic_quotes özelliği açıktır. Bu nedenle gönderilen bütün form bilgileri otomatik olarak addslash işleminden geçiriliyordur. Yani
    "insert into kelimeler(sozcuk,karsilik)values('ceo','yonetici')" şeklinde bir bilgiyi post ettiğinizde, diğer sayfadaki $_POST["sql"] değişkeninin değeri
    \"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"
    olacaktır. Bu nedenle
    $db->query($_POST["sql"]); şeklinde kullanmadan önce $_POST["sql"] değişkenini bir yazdırın eğer slash olan şekliyle geliyorsa bu değişkene stripslashes fonksiyonunu uygulamanız gerekir.
    $db->query(stripslashes($_POST["sql"]));
    şeklinde kullanmanız uygun olacaktır.
    SQL ile ilgili uygulamalarda SQL sorgusunu çalıştırmadan önce oluşan SQL cümlesini echo ile yazdırmak her zaman hataları kontrol açısından önemlidir.
    Sitenizi inceledim, çok güzel, çalışmalarınızın devamını ve başarılar dilerim.

  27. Ertuğrul Erkan dedi ki:

    Teşekkürler hocam :) Yakında daha güzel uygulama yayımlayacağım fakat biraz sorunlu :) Bu arada dediğiniz gibi yaptım ( önceden de denemiştim ) problem devam ediyor :/ Ayrıca dediğiniz gibi sql kodlarını ( yani yolladığım kodlarıda ) kontrol ediyorum tabi;

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')"' at line 1 in C:\AppServ\www\sql\ez_sql_mysql.php on line 204

    yine de kodlarda problem var :/

  28. Ertuğrul Erkan dedi ki:

    Herkesten çok özür diliyorum fakat çözümü buldum ve paylaşmak istiyorum;

    Arkadaşlar ben kodu tırnaklı halde veriyormuşum;

    "INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')"

    fakat çift tırnak zaten karşı tarafta string olarak okunuyormuş tabi ki iki adet tırnakta hata veriyormuş.

    INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')

    diyerek direkt yolladım ve metin bazlı kabul edilerek okundu. iyi günler herkese.

  29. ffatih dedi ki:

    "Oldukça da güçlü bir sınıf olup, WordPress’in veritabanı alt yapısını da oluşturuyor."
    Hocam bu cümlen kullanmak için yeterli bir sebep :) . Doyurucu anlatımınız için teşekkürler.

Yorum Yaz

Yorum yazarken dikkat etmeniz gereken hususlar;

  1. Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  2. Yorumlar onay gerektirdiğinden birden fazla kez aynı yorumu yazmayınız.
  3. Yorumlarınızın konu ile alakalı olmasına özen gösteriniz.
  4. REKLAM KOKAN YORUMLAR YAPMAYIN, YAYINLAMIYORUM.
  5. Küfür, hakaret etmenizin ne bana, ne de size faydası olmadığını unutmayın.
  6. Yorum yapmanız, onaylanacağı anlamına gelmemektedir. Buradaki hususlara dikkat etmeniz, onaylanma şansını artıracaktır. Ayrıca kullanım şartlarını okumanızı tavsiye ederim.
Kodlarınızı yazmak için, [php][/php], [css][/css], [html][/html], [js][/js], [sql][/sql], [xml][/xml] veya [code][/code] kullanabilirsiniz. & lt; & gt; kullanmayın.