Kişisel Bir Web Günlüğü

eburhan DBO class

eburhanBiliyorsunuz benim yazdığım ve ismi eBurhan VT Class olan bir php sınıfı var. En son 1.5 sürümünü yayınlamıştım. Bu sınıfı yazmaya başlarken tasarımını basit tutmuştum fakat umduğumdan daha çok kullanıcısı olunca gelişmiş bir versiyonunu hazırlamaya karar verdim. İşte bu sebeble eBurhan VT Class artık geliştirilmeyecek. Bundan böyle bu yazıda tanıtacak olduğum daha gelişmiş, daha esnek ve daha soyut olan eburhan DBO class ile devam edeceğiz. Tabir-i caizse eburhan DBO class, eski olan eBurhan VT Class’ın tam bir evrim geçirmiş halidir :)

Bu sınıf nedir, ne işe yarar?

eburhan DBO class ile veritabanına kolaylıkla sorgular gönderebilir ve sorgu sonuçlarını alabilirsiniz. Esnek, hızlı ve gelişmiş bir sınıftır. Yerleşik önbellekleme ve hata loglama özellikleri vardır. Aynı anda MySQL (mysql ve mysqli), MSSQL (mssql ve sqlsrv), Postgresql, Sqlite veritabanlarına destek verir. ODBC sürücülerini kullanarak çeşitli veritabanlarına bağlantı açabilir (deneysel). Çalışabilmesi için PHP 5.1 ve yukarısı gerektirir.

major veritabanlarieburhan DBO class ile major veritabanlarından istediğinize kolayca bağlanabilirsiniz
Sınıfın ayar yönetimi eburhan Config class tarafından, önbellek yönetimi ise eburhan Cache class tarafından yapılmaktadır. Loglama işlemleri içinse yine soyut bir log sınıfı kullanmaktadır.

Nasıl kullanılır?

Sınıf ile ilgili bütün ayarlar “dbo.opt.php” isimli dosyada tutuluyor. Bu dosyanın içeriği hakkında dökümandan yardım alabilirsiniz. Ayarların nasıl tanımlandığına aşağıdaki örnekte görebiliyoruz:

<?php
return array
(
    // VERİTABANI İLE İLGİLİ AYARLAR
    'dbase' => array
    (
        'type' => 'mysqli',
        'conf' => array(
            'name' => 'mysql',
            'user' => 'root',
            'pass' => '',
            'open' => false,
        )
    ),

    // ÖNBELLEKLEME İLE İLGİLİ AYARLAR
    'cache' => array
    (
        'type' => 'xcache',
        'time' => 10,
        'rows' => 0,
        'conf' => array(
            'user' => 'admin',
            'pass' => '12345'
        )
    ),

    // HATALAR İLE İLGİLİ AYARLAR
    'error' => array
    (
        'path' => './log/error/',
        'save' => true,
        'show' => true,
        'exit' => true
    ),

    // YAKALAMA MODU ile ilgili ayarlar
    'fetch' => 'obj'
);

Bu ayar dosyasını ve sınıfın kendisini sayfaya dahil ettikten sonra kullanıma hazırız demektir.

<?php
// sınıfı ve seçenekleri yükle
require_once 'dbo.class.php';
$opt = require 'dbo.opt.php';

// sınıfı kullanıma hazırla
$dbo = DBO::getInstance();
$dbo->setOpt($opt);
$dbo->connect_db();

// sorgu gönder
$dbo->setSql('SHOW DATABASES');
$dbo->runSql();

// sonuçları göster
foreach ($dbo->getAll() as $row) {
   echo $row->Database . '<br />';
}

İsterseniz sınıfın kendisini ve kullanılacak olan ayarları sizin yerinize otomatik olarak yükleyen, ve ayrıca sınıfı kullanıma hazır hale getiren “dbo.init.php” dosyasını da kullanabilirsiniz. Çoğu zaman bu dosyayı kullanmak daha pratik olacaktır. Böylece yukarıda yaptığımız işlemin aynısı daha sade şekilde aşağıdaki gibi yapabiliriz:

<?php
// hızlı başlangıç dosyasını yükle
require_once 'dbo.init.php';

// sorgu gönder
$dbo->setSql('SHOW DATABASES');
$dbo->runSql();

// sonuçları göster
foreach ($dbo->getAll() as $row) {
   echo $row->Database . '<br />';
}
eburhan dbo clas dökümaneburhan DBO class ayrıntılı ve kullanışlı bir dökümantasyona sahiptir

Sonuca gelirsek…

Daha önceden eBurhan VT Class kullananlar bu yeni sınıfa kolayca adapte olacaklardır çünkü metot isimleri ve metotların kullanılışı birbirlerine çok yakın. Takıldığınız noktalarda zaten döküman size yardımcı olacaktır. Bütün ayarların ve metotların ne işe yaradığını ve nasıl kullanılması gerektiğini dökümanda yazdım. Gerekli olan bütün dosyaları eBurhan Araçları sayfasından bilgisayarınıza indirebilirsiniz. Faydalı olması dileyiğle ;)

eburhan dbo class kopya kağıdıeburhan DBO class sınıfının temel metotları
11 Eylül 2010 Programlama Bugün 7 kez, toplamda ise 13.738 kez okundu. , , , ,
29 yorum var
  1. murat alabacak 11 Eylül 2010 12:48

    merhabalar ya ben bir işe kalkıştım TÜRKÇE MYSQL diyebileceğimiz bir veri depolama sistemi kuruyorum. fakat sizin kullandığınız hata gösterme fonksiyonu gibi bir fonksiyon kurdum. sorun bu değil tabi sorun “Satır:” bilgisini almada __LINE__ kullanıyorum ama bu classın içinde olan mesela 6. satırdaki $this->HataOlustur(__LINE__, dediğimde bana 6 veriyor ama ben bu fonksiyonun kullanıldığı index.phpdeki 14. satırı istiyorum nasıl yapabilirim?

  2. maaşallahın var abi tebrik ederim çok güzel şeyler hazırlıyorsun ellerine sağlık.

  3. @murat alabacak
    Exception konusuna bakabilirsin veya debug_backtrace() fonksiyonuna…

  4. murat alabacak 11 Eylül 2010 13:37

    2 şey için de teşekkür ederim :) aslında yazdığın kodlarda bu fonksiyonu görmüştüm ama bug falan görünce önemsiz birşey sandım :)

  5. MaşAllah. Bu iyi oldu :)

  6. Ellerinize saglık güzel bir çalışma olmuş

  7. Öncelikle bu yeni sınıf için teşekkürler VT sınıfını kullanıyordum şimdi bu sınıfı kullanmaya başlayacağım. Bir de eski sınıftaki “arg” fonksiyonu bu sınıfta da kullanabiliyor mu?

  8. @Göktuğ Gümüş
    arg() yerine aynı setArg() kullanıyorsun. döküman‘a bakmana öneririm.

  9. Ellerine sağlık teşekkür ederiz. Gerçekten güzel bir sınıf olmuş. Kullanım açısından Eburhan VT 1.5 tan çok fazla farkı yok GİBİ. Artısı çok eksiği yok diyebilirim :) çok sevindirik oldum sayende. seni bulduğumdan beri daha derli toplu olmaya başladı işlerim :D Çanakkaleye geldiğimde oralarda olursan yüz yüze tanışmak isterim senin gibi bir değer ile. kal sağlıcakla. döküman da gayet yeterli bu arada. benim gibi bir acemi bile anlayabiliyorsa artık :) bol bol teşekkürler…

  10. ilk hatam ile karşı karşıyayım :( sorun garanti bendedir de :D
    Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in D:\www\laboratuar\public_html\classes\backend\Dbase\Wrapper\Mysqli.php on line 72

    argüman kullanınca bu hatayı alıyorum. 72.ci satırda da real_escape fonksiyonu var. fonksiyonda bi sıkıntı yok ama hata alıyorum. kullandığım sorgu da;

    $vt -> setSql(“select * from tbl_kurum where sorumlu_email = %s and kurumkodu = %u and sifre = %s and aktif = %u”);
    $vt -> setArg($kullanici,$kurum,$sifre,’1′);
    $vt -> runSql();
    $kac = $vt -> numRows();

  11. sorunun temel kaynağını buldum :) real_escape fonksiyonunda mysql ile mysqli arasında ufak bir fark var. backend\Dbase\Wrapper\Mysqli.php dosyasının 72. satırındaki,

    return mysqli_real_escape_string($str, $this->link);

    satırı,

    return mysqli_real_escape_string($this->link, $str); şekilde değiştirilirse problem giderilebiliyor. mysql ile mysqli arasında ufak bir kodlama farkından olduğunu öğrendim bu arada. mysql de önce düzenlenecek metin sonra bağlantı linki, mysqli de ise önce bağlantı linki sonra düzenlenecek metin girişmesi gerekiyormuş. erhan hocam sen daha iyi bilirsin ama bu bir bug olabilir, bir bak istersen. mysqli de çok yetkin değilim açıkçası biliyorsun zaten :D

  12. Hata bildirimin için teşekkür ederim Erdem. Sınıfı güncelledim.

  13. Merhabalar localhostta çalıştıramadım bir türlü. Hangi cache sistemini denediysem hata alıyorum. Bu konu hakkında yardım edermisiniz?

    Fatal error: Uncaught exception ‘Cache_Exception’ with message ‘memcache plugin not installed’ in C:\wamp\www\bset\backend\Cache\Adapter\Memcache.php:12 Stack trace: #0 C:\wamp\www\bset\backend\Cache.php(47): Cache_Adapter_Memcache->__construct(Array) #1 C:\wamp\www\bset\dbo.class.php(117): Cache::factory(‘memcache’, Array) #2 C:\wamp\www\bset\init.php(12): DBO->setOpt(Array) #3 C:\wamp\www\bset\yonetim\index.php(2): require_once(‘C:\wamp\www\bset…’) #4 {main} thrown in C:\wamp\www\bset\backend\Cache\Adapter\Memcache.php on line 12

  14. Fonksiyonları da türkçeleştirseydiniz çok daha iyi olurdu.

    Eline sağlık..

  15. Erhan Arkadaşım Eline Sağlık Öncelikle Ben Daha Öncki Sınıfı Kullanıyordum Buna Geçmem İçin Bir Neden Varmı Acaba Yoksa Eskisi Hala Bu Sınıfa Kafa Tutarmı

    Sadece Mysql Kullanıyorum Bu Arada

  16. Mustafa Eski 21 Eylül 2010 17:09

    Böyle bir sınıf oluşturmanız güzel düşünce fakat ingilizce olması hiç de iyi olmamış. Sizin eski vt class’ınızı kullanmamızın en büyük sebebi türkçe olmasıydı. Yanlış anlamayın ama ingilizce kullanmak zorunda kalacaksak çok daha gelişmiş class’lar var sizde biliyorsunuz..

  17. Merhaba,
    PDO yerine mysqli/mysql seçmenizin özel bir nedeni var mı ?

  18. Oğuz Özcan 23 Eylül 2010 22:24

    Erhan, büyük bir emek sarf etmişsin ve çok iyi bir sınıf hazırlamışsın( içimden mükemmel demek geliyor aslında ). Ellerine sağlık.

    Eski sınıfını tüm projelerimde kullanıyordum. Mysqli için güncellediğinden ve çalıştığım şirketlerin hosting firmaları mysqli’yi henüz desteklemediğinden dolayı çok sıkıntı yaşıyordum. Tam o anda sitene tekrardan girip bu projeyi gördüğümde nasıl bir sevinç yaşadım anlatamam.

    Hemen indirip projeye adapte ettim. Ellerine sağlık gerçekten, o kadar söylemek istediğim söz var ki şuanda, duygulandım söyleyemiyorum. İnşallah bunlardan çok daha fazla para kazanırsın. Donate ile ilgili bir kısım koyarsan projelerine destek yollayacağım. Çok teşekkür ediyorum tekrardan. Ellerin dert görmesin.

    Oğuz Özcan

  19. @Furkan
    sisteminde “memcache” eklentisi kurulu olmadığı için o hatayı almışsın. Önbellekleme için “file” adaptörünü kullanmayı deneyebilirsin veya sistemine memcache kurmalısın.

    @Aydın Yakar, @Hakan
    fonksiyonların türkçe olup olmaması kullanımı o kadar etkilememeli. Eskiden “alHepsi” kullanıyorduk şimdi ise “getAll” kullanıyoruz. Bunda çok büyük bir fark mı var sanki? Zaten dökümanda neyin ne olduğunu anlatıyoruz. Sınıfı kullanmamak için bu bir bahane olamaz.

    @/dev/mach
    PDO zaten veritabanına erişimde bize bir soyutlama sunuyor. PDO kullanılacaksa DBO sıfınına pek de gerek yok.

    @Oğuz Özcan
    yorumun için teşekkürler.

  20. eski vt class sınıfına göre çok daha iyi(fakat onu kulanmıyordum ezsql kullanıyordum) ve en güzel yönü ingilizce olması , öyle birşeyin zaten Türkçe olarak bu sınırlar içinde kalması yazık olurdu ,eline sağlık…

  21. erhan hocam sınıf için çok teşekkürler, gördüğüm kadarıyla çok iyi olmuş. fakat bir türlü çalıştırabilmiş değilim sınıfı. ne hata ne başka bir şey, sadece boş sayfa geliyor önüme. acaba önerebileceğiniz bir şey var mı? teşekkürler…

  22. @aydın, @mustafa
    erhan ın dediği gibi olaya yaklaşımınız çok ters bence. evet EB VT 1.5 güzeldi Türkçe olması sebebiyle. Ancak çok derli toplu değildi. Özellikle cache konusunda bu sınıf 10 numara ayrıca en fazla kullanılan bir çok veritabanına tek bir sınıf ile erişime izin veriyor. herhangi bir nedenden dolayı veritabanınızı değiştirmek zorunda kalsanız ne yapacaksınız? bu sınıf bu konuda biçilmiş kaftan. ayrıca yazdığınız sınıfın dünya tarafından kullanılmasını istiyorsanız, kusura bakmayın ancak ingilizce tanımlar ve açıklamalar koymalısınız. açıkçası ben php de class yazmasını erhandan öğrendim bu veritabanı classları sayesinde. Clickatell in SMS API si için class yazdım, mecbur ingilizce. sadece kendime yazmıyorum ki. ancak websms.com.tr nin SMS apisi için class yazdım türkçe. çünkü hitap ettiği kısım Türkiye. bu bir vizyondur bence arkadaşlar. sonuçta hepimiz getAll ne demek biliyoruz herhalde. programlama ile uğraşan herkes az çok ingilizce biliyordur herhalde.

    @erhan tekrar ellerine sağlık. bu kaçıncı projem kullanıyorum, tek kelime ile harika. donate (bağış) bölümü yapsan bağışta bulunurum sana. haberin olsun. senin gibi insanların desteklenmesi lazım bu ülkede. hatalar söylenir ancak yersiz eleştirilere tamamen karşıyım yanındayım…

  23. @mert
    üzgünüm ama herhangi bir hata yoksa sorunun ne olduğunu söyleyemem :(

  24. Merhabalar,

    Öncelikle bu yararlı class için çok teşekkür ederim. Benim sormak istediğim bir soru var, cache sistemini nasıl devre dışı bırakırız ? Cache sistemi istemiyorum kullanmak.

  25. @Yasin
    Cache ayarları altındaki ‘time’ ve ‘rows’ değerleri 0 olursa önbellekleme yapılmaz.

  26. Ellerine sağlık.
    Tam bir ihtiyaçtı benim için. İki günde elim alıştı. Çok sevimli ve hızlı bir yapı.Başarıların devamını dilerim.
    Teşekkürler.

  27. Çok güzel bir çalışma olmuş. Projelerimizi geliştirmede gerçekten çok işimize yarayan bir çalışma. Çok teşekkür eder ve başarılarınızın devamını dilerim.

  28. Ellerine sağlık harika bir sınıf olmuş :)
    İhtiyacımı karşıladı. Sağol.

  29. Erhan kardeş merhaba,

    Ben smarty ile senin DBO classını harmanlayıp bir proje hazırlıyorum.

    Mysql den veri çektiğim zaman gelen veri sayısı 500 den fazla ise ekran bembeyaz kalıyor, sql de limit 0,500 yapınca veriler ekrana yazıyor.

    Sayfalama yapıyorum ve her sayfada 20 kayıt gösteriyorum ancak yinede kayıt sayısı 500 ü geçince ekran bembeyaz kalıyor.

    Class da bununla ilgili bir ayar varmı? varsa nereyi hangi kritere göre düzenlemem gerektiğini yazarsan sevinirim.

    İlgin için şimdiden teşekkür ederim.

    Saygılarımla

    @Salamons

İçinizde kalmasın, siz de yorum yazın

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