Kişisel Bir Web Günlüğü

eBurhan VT Class v1.5 yayınlandı

güncellemeVeritabanı sınıfımın en son 1.2 versiyonunu yayınlamıştım hatırlarsanız. şimdi ise doğrudan 1.5 sürümüne geçiş yapıyoruz çünkü bu sürümle birlikte PHP 4 desteğini tamamen kaldırdım. Ayrıca bu yeni versiyonla birlikte mysql(i) eklentisinin fonksiyonlarını kullandım. Dolayısıyla sunucunuzda bu eklentinin yüklü ve etkinleştirilmiş olması gerekecek. Bağlantıları kapatmak için kullandığımız kapat() isimli metoda artık gerek yok. Seçenek, bağlantı ve sorgu metotlarına metot zincirleme özelliği kazandırdım ve önbellekleme (cache) ile ilgili bazı geliştirmeler yaptım. Güncellenmiş olan bu versiyonu eBurhan Araçları sayfasından indirebilir, yapılan değişikliklerin tamamını dökümandan (DOC klasöründeki) öğrenebilirsiniz ;)

23 Ocak 2010 Programlama Bugün 6 kez, toplamda ise 12.236 kez okundu. , , ,
31 yorum var
  1. Görünüşe göre mysql(i) eklentisinin kullanımı kullanıcılar tarafından geliştirilen veritabanı sınıflarının kullanımından bir farkı yok. Fark olmayacaksa neden bu değişiklik ? Ayrıca mysql(i) eklentisi sunucusunda olmayanlar için kötü bi durum olmuş.

  2. Cemil ÇELiK 24 Ocak 2010 10:31

    şu anda kodları inceliyorum. Mutlaka iyi bir class olmuştur. Fakat okurken şunu düşündüm. Bir insan kendi yazdığı class’ı çok iyi kullanabilir. Çünkü her satırını kendisi düşünmüştür. Ya da ben class okuyamıyorum. Bu mysql’e bağlanma class’ı için çok geçerli olmasa da daha fazla fonksiyonu olan içiçe geçmiş class’ları kullanırken zorlanıyorum. Class okumanın ve kullamanın bir kolay yolu var mıdır?

  3. @Alican

    Fark olmayacaksa neden bu değişiklik ?

    Fark olmaz olur mu hiç? Php Manual’deki şu açıklama bile yeterli:

    Note: If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use the mysqli extension instead.

    @Cemil ÇELiK
    Kodlardan önce “dökümanı” okumak çok faydalı olacaktır. Dökümanda o class’ın ne gibi özellikleri olduğu, neler yapıp yapamayacağı açık bir şekilde anlatılmıştır. Direkt kodların içerisine dalmak -eğer php bilginiz iyi seviyede değilse- zaten yanlış olacaktır. eBurhan VT Class içerisinde çok iyi bir döküman var ve okunmayı hakediyor.

  4. Tebrikler !

    Güzel çalışma..

  5. Tebrikler ve teşekkürler Erhan Bey. Çalışmalarınızı gıpta ile takip ediyorum. Sizin gibi insanlara çok ihtiyacımız var..

  6. tebrikler üstad. takipteyiz.

  7. Ellerine sağlık :)

  8. Elinize sağlık hocam harika olmuş. Yazılarınızı ilgiyle takip ediyorum.

    Benim sorum olacaktı :) sorum şu; FileCache ile kullansam bunu ikisi çakışma yapar mı yoksa ikisi de ayrı performans artışı sağlar mı sorun olur mu yani? Bir de smarty engine ile kullansam sorun teşkil eder mi? cache’ler?

    şimdiden teşekkür ederim. Başarılarınızın devamını dilerim.

  9. @RaSiM
    Cache özelliğini istediğin zaman açıp-kapatma özelliği var. Eğer başka cache’leme sınıfları kullanacaksan elbette kullanabilirsin, çakışma olacağını hiç sanmıyorum. VT Class ile çektiğin sorgu sonuçlarını diğer cache’leme sınıflarına gönderip önbellekleme yapabilirsin. Smarty de sorun çıkarmaz.

  10. Emeğine sağlık. Çok başarılı bir çalışma olmuş.
    Bir sorum olacak:
    Php5 kullanıyorum ve mysqli desteği mevcut olamsına rağmen Notice: Undefined offset: 3 in D:\www\vhosts\localhost\class\VT_Class_v1.5\veritabani\eb.vt.php on line 308
    hata veriyor. Nasıl düzeltebilirim?

  11. 308: $this->vt_host = is_string($args[3]) ? $args[2] : ‘localhost’;

    satırında bulunan $args[2] dizi değişkenini $args[3] olarak değiştirmek gerekiyor, aksi halde bağlantıda host yerine şifre değerine bağlanmaya çalışılıyor..

    localhost üzerinden mysql kullanan arkadaşlar $vt->baglan() içerisinde host tanımlamadıkları zaman bu sorunla karşılaşmazlar..

  12. Veritabanına kaydedilirken kullanılan escape fonksiyonları nedeniyle slash’lanan (\) tırnak işaretleri, veritabanından okunduğunda silinmesi gerektiği için StripSlashes() fonksiyonu kullanılması gerekmektedir. Yeni arkadaşlar bu konuda sıkıntı yaşıyabilirler..

  13. Bu veritabanı sınıfından mysql_insert_id gibi bir fonksiyon var mı? Varsa söyler misin yoksa da yardımcı olman mümkün mü senin sınıfını kullanıyorum ve şuan o fonksiyona ihtiyacım var

  14. @Göktuğ Gümüş
    Son yaptığın insert işleminden sonra alttaki komutu çalıştırabilirsin:

    // son eklenen kaydın ID numarasını al
    echo $vt->insertID();


  15. $vt->sql("SELECT videoAdi,videoThumb,videoEtiket,partSayisi FROM pVideolar WHERE id = %u");
    $vt->arg($id);
    $vt->sor();

    list($videoAdi, $videoThumb, $videoEtiket, $partSayisi) = $vt->alSatir();

    diye bir işlem yaptığımda

    Fatal error: Cannot use object of type stdClass as array in ...

    diye bir hata veriyor neden kaynaklanıyo olabilir?

  16. $vt->alSatir();

    yerine

    $vt->alSatir(‘num’);

    yazarsan düzelir. Vaktin olduğunda dökümana göz atmanı öneririm, çünkü bu sordukların hep dökümanda olan şeyler.

  17. Merhaba birçok projemde sizin veritabanı sınıfınızı kullanıyorum. şuanki tek sorunum MYSQL “like” komutunu kullandığımda hata göstermesi. Normal “=” kullandığımda hata göstermiyor.

    $vt->hataGercek()
    yapmama rağmen mesajda bişi gözükmüyor.

    $vt->sql("SELECT * FROM pVideolar WHERE videoAdi like '%" . $aramaDecodeUTF8 . "%' ORDER BY id DESC LIMIT %u,%u")->arg($baslangic,$kayit)->sor();

    SS: http://prntscr.com/d4z6

  18. $vt->sql("SELECT * FROM `pVideolar` WHERE `videoAdi` like '%s' ORDER BY `id` DESC LIMIT %u, %u");
    $vt->arg(('%'.$aramaDecodeUTF8.'%'), $baslangic, $kayit);

    şeklinde deneyebilirsin.

  19. Merabalar Erhan hocam alttaki çalışmama bakarsan belki sen daha iyi bir çözüm üretebilirsin

    $sql = “select SQL_CALC_FOUND_ROWS oid, baslik, il, ilce, sezon, para, resim from $ayar[prefix]_otel where yayin = ’1′ order by eklenme desc”;
    $desc = ” LIMIT $start,$ayar[limit]“;

    $vt->sql($sql.$desc); $vt->sor($ayar[ctime]); $veri = $vt->alHepsi();
    $vt->sql(“SELECT FOUND_ROWS()”); $vt->sor(10000); $num = $vt->alHepsi(‘arr’);
    foreach ($num[0] as $c){$b = $c;} $numrows = $b;

    burda tek sorgu almak istediğim kadarını alıyorum vede uyuşan tüm satır sayısını buluyorum ama koda bakarsan kulağımı tersten tuttuğumu göreceksin :)
    “SQL_CALC_FOUND_ROWS” olayına harici bir tetikleyici ekleyebilirsin belki kolay gelsin

  20. Merhaba,


    if($_GET["getir"]==”id”){$sira=’id’;}
    if($_GET["getir"]==”ad”){$sira=’ad’;}
    if($_GET["getir"]==”soyad”){$sira=’soyad’;}

    $vt->sql(‘SELECT id,ad,soyad FROM uye WHERE aktif=E ORDER BY %s DESC LIMIT 1,5′);
    $vt->arg($sira);
    ….
    Bu sorguda ORDER BY kısmı çalışmıyor. Çalışmama sebebi ise sorgu yaparken %s değeri olan $sira’yı tırnak içinde sorguya dahil etmesi. Bunu nasıl aşabiliriz?

    $vt->alSql(); ile çektiğim sorgu şöyle:
    SELECT id,ad,soyad FROM uye WHERE aktif=’E’ ORDER BY ‘id’ DESC LIMIT 0,5

    şöyle olsa çalışacak:
    SELECT id,ad,soyad FROM uye WHERE aktif=’E’ ORDER BY id DESC LIMIT 0,5

    yani ORDER BY ‘id’ kısmındaki id tırnak içinde olmamalı.

  21. merhaba erhan,
    class çok müthiş olmuş hakikaten, biraz kullandım. benim gibi php ye yeni geçen biri için çok sadece ve başarılı diyebilirim ancak dediğim gibi php de yeni olduğum için mysqli de problem yaşıyorumç şöyle ki; utf-8 karakter kodlamasını kullanmak istiyorum ancak, ya client tarafında ya da mysql içerisinde karakterler bozuluyor. bir türlü çözemedim. şu anda ezsql e döndüm ancak daha kullanışlı geldiğinden senin sınıfını kullanmak istiyorum. mysql de tr karakterler düzgün olursa sayfada bozuk oluyor, sayfada düzgün olursa mysql de karakterler bozuk oluyor. windows 7 üzerinde apache 2.2, php 5.2.13 ve mysql 5.1.44 sürümünü kullanıyorum. bu problemi nasıl çözebiliriz acaba?

  22. Insert yaparken null olacak alanları bile yazıp belirtmem gerekiyor fakat update işleminde gerekmiyor.
    Açaba ben mi yanlış yapıyorum?

  23. iyi ama bu sınıfın bir özelliği değil ki? yazdığın SQL kodunu ona göre düzenlemen lazım. veya tablodaki alanlara varsayılan değerler ataman gerek ki her insert yapışında o alanlara bir değer girmene gerek kalmasın.

  24. Toraman Sade 20 Temmuz 2010 09:34

    merhabalar, öncelikle teşekkürler emeğiniz için. Benim Türkçe karakterlerle ilgili problemim oluyor. Veritabanım “latin5_turkish_ci”. Veritabanına kaydedilen tüm bilgilerde Türkçe harfler “?” olarak gözüküyor. Birçok şey denedim fakat yapamadım. Bu konuda yardımcı olurmusunuz acaba?

  25. Toraman Sade

    $vt = new VT;
    $vt->baglan($database);
    $vt->sql(“SET NAMES ‘utf8′”)->sor();
    $vt->sql(“SET CHARACTER SET utf8″)->sor();
    $vt->sql(“SET COLLATION_CONNECTION = ‘utf8_turkish_ci’”)->sor();

    Veritabanınızı UTF-8 ayarlayınız.

  26. // sorgu oluştur ve gönder
    $vt->sql(‘SELECT `isim`,`yas` FROM `uyeler`)->sor();

    // sorgu sonucunu al
    $veriler = $vt->alHepsi();
    $veriSay = $vt->numRows();

    ben dokümanı baştan sona satır harf atlamadan okudum…fakat birşeyi anlamadım…mesela yukarıda sorgu yapmış sonucu almışınız…peki aynı sayfa içinde birkaçtane sorgu yapacaksam $vt1 $vt2.. gibi mi gidicem…eğer öyle değilse $degisken = $vt->alHepsi(); yaptığımda $degisken hangi sorgunun sonucunu alacak..

  27. @eren can
    aynı sayfa içinde birden fazla sorgu yaparken farklı birşey yapmana gerek yok.

    // 1. sorgu
    $vt->sql('SELECT * FROM `uyeler`')->sor();
    $tumUyeler = $vt->alHepsi();
    
    // 2. sorgu
    $vt->sql('SELECT * FROM `haberler`')->sor();
    $tumHaberler = $vt->alHepsi();
    
  28. arkadaşlar yukarda iki kere soru sordum bir cevap alamadım, cevap verebilecek bir arkadaş yok mu?
    $vt->sql(‘SELECT id,ad,soyad FROM uye WHERE aktif=E ORDER BY %s DESC LIMIT 1,5′);

    sorgu içindeki ” ORDER BY %s ” de, %s yerine atanan değer sorguda tek tırnak içinde getiriliyor. bu yüzden de sorgu çalışmıyor. tırnak olmaksızın nasıl çağırabiliriz?

  29. SQL içinde değişken kullananarak deneyebilirsin.

    $order = 'asc'; // bu değer dışarıdan geliyorsa gerekli önlemi almalısın
    
    $sql = 'SELECT id,ad,soyad FROM uye WHERE aktif=E ORDER BY %s DESC LIMIT 1,5';
    $sql = sprintf($sql, $order);
    
    $vt->sql($sql);
    
  30. erhan hocam bu classı beğeniyle kullanıyorum. ancak sana sormak istediğim bir konu daha var. stored procedure olay. zor zar veritabanıma bir procedure ekledim. ancak bu class ile bu sınıfı nasıl çağırabilirim?

    Yazdığım Procedure :
    drop procedure if exist deneme.ilk
    CREATE PROCEDURE deneme.ilk (IN s INT,OUT d INT)
    BEGIN
    set d = SELECT COUNT(*) FROM oylar WHERE oydegeri=s;
    END

    bu prosedür veritabanında başarıyla çalışıyor ya da ben öyle zannediyorum ancak sqlfront programında ‘s’ e değer verdiğimde ‘d’ bana doğru bir biçimde geri döndürüyor.

    php dosyamda prodesürü çağırmak için:
    $vt-> sql(“call proc(6)”) -> sor();
    $deger = $vt -> alTek();
    echo $deger;

    satırlarını kullanıyorum. ve classın bana geri döndürdüğü hata ise
    mesaj : Incorrect number of arguments for PROCEDURE deneme.ilk; expected 2, got 1

    nasıl bir yol izlemeliyim?

  31. @erdem arslan
    prosedürü çalıştırdıktan sonra bir değişkene atamışsınız (out d int). Prosedürü çağırırken ard arda:

    mysql> CALL prosedur_ismi(120, @deger);
    mysql> SELECT @deger AS oyDegeri;
    

    şeklinde sorgu göndermeniz lazım. vt class ile çağırırken de şöyle yapabilirsiniz:

    $vt->sql('call prosedur_ismi(120, @deger)')->sor();
    $vt->sql('SELECT @deger AS oyDegeri')->sor();
    echo $vt->alTek();
    
İçinizde kalmasın, siz de yorum yazın

Telif Hakkı © 2012 eburhan.com | Structure | XHTML