eburhan DBO class
Biliyorsunuz 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.
eburhan DBO class ile major veritabanlarından istediğinize kolayca bağlanabilirsiniz
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 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 sınıfının temel metotları
















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?
maaşallahın var abi tebrik ederim çok güzel şeyler hazırlıyorsun ellerine sağlık.
@murat alabacak
Exception konusuna bakabilirsin veya debug_backtrace() fonksiyonuna…
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
MaşAllah. Bu iyi oldu
Ellerinize saglık güzel bir çalışma olmuş
Ö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?
@Göktuğ Gümüş
arg() yerine aynı setArg() kullanıyorsun. döküman‘a bakmana öneririm.
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
Ç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…
ilk hatam ile karşı karşıyayım
sorun garanti bendedir de 
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();
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
Hata bildirimin için teşekkür ederim Erdem. Sınıfı güncelledim.
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
Fonksiyonları da türkçeleştirseydiniz çok daha iyi olurdu.
Eline sağlık..
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
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..
Merhaba,
PDO yerine mysqli/mysql seçmenizin özel bir nedeni var mı ?
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
@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.
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…
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…
@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…
@mert
üzgünüm ama herhangi bir hata yoksa sorunun ne olduğunu söyleyemem
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.
@Yasin
Cache ayarları altındaki ‘time’ ve ‘rows’ değerleri 0 olursa önbellekleme yapılmaz.
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.
Ç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.
Ellerine sağlık harika bir sınıf olmuş
İhtiyacımı karşıladı. Sağol.
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