Kod yazarken şüphesiz ki nesne tabanlı programlamanın nimetleri olan sınıflardan (class) faydalanırız. Eğer hazırlayacağımız uygulama PHP dili ile yazılmakta ve MySQL veritabanını kullanacaksa size şiddetle tavsiye edeceğim sınıf WordPress‘in de altyapısını oluşturan ezSQL sınıfıdır. Zaten daha önce bu sınıfı kısaca tanıtmıştım. Bu makalede kullanımı oldukça basit ve pratik olan bu sınıfı temel olarak MySQL veritabanı ile nasıl kullanılacağını örneklerle anlatmaya çalışacağım. İyi seyirler…
ezSQL, PHP programlama dili ile yazılmış bir sınıftır (class). Her ne kadar en çok MySQL veritabanlarını yönetmek için kullanılsa da PHP-PDO, Oracle8, InterBase/FireBird, PostgreSQL, SQLite (PHP), SQLite (C++) ve MS-SQL veritabanlarında da kullanılabilir.
Bu sınıfın fonksiyonunu kısaca belirtmek gerekirse “veritabanına bağlanmanızı ve tablolarınızdaki verilerinizi yönetmenizi sağlar” diyebiliriz. WordPress gibi dünyada milyonlarca kişi tarafından kullanılan günlük sisteminin bu sınıfı kullanması sanırım ezSQL’in önemini ve kalitesini vurgulamanın en kısa yoludur.
ezSQL, Justin Vincent isimli bir programcı tarafından yazılmıştır. Sınıf hakkında daha fazla bilgi almak ve gerekli dosyaları indirmek için ilgili siteyi ziyaret edebilirsiniz. Yazılarımda vermiş olduğum dosyaların indirme adresleri zamanla geçerliliklerini kaybedebiliyor. Bu nedenle kendi siteme de ezSQL’in son sürümü olan 2.04′ü yükledim. Buradan indirebilirsiniz.
Yukarıda belirttiğim gibi bu makalede ezSQL’in MySQL veritabanı ile kullanımını anlatacağım. Bunun için sunucumuzda herhangi bir isimle yeni bir dizin oluşturuyoruz. İndirmiş olduğumuz paketin içinden mysql klasöründeki ez_sql_mysql.php ve shared klasöründeki ez_sql_core.php dosyalarını alıyoruz ve yeni oluşturduğumuz dizine yüklüyoruz. Bununla birlikte aynı dizinde boş bir index.php dosyası oluşturuyoruz.
Uygulamamızın anasayfası olduğunu düşündüğümüz index.php dosyasına şu kodları yazarak ezSQL sınıfını çağırabiliriz ve tam anlamıyla kullanmaya başlayabiliriz. Dikkat etmeniz gereken bir husus var ki o da veritabanı bilgilerini de (kullanıcı adı, parola, veritabanı ismi ve sunucu) bu satırlarda belirtiyoruz.
index.php dosyasının içeriği
<?php //ezSQL çekirdegini dahil ediyoruz. include_once "ez_sql_core.php"; // ezSQL veritabani bilesenini cagiriyoruz. include_once "ez_sql_mysql.php"; // veritabanin ayarlarini yapiyoruz. $vt_kullanici="root"; $vt_parola=""; $vt_isim="bilgiler"; $vt_sunucu="localhost"; // ezSQL sinifini cagirarak calistirmaya basliyoruz. $db = new ezSQL_mysql($vt_kullanici,$vt_parola,$vt_isim,$vt_sunucu); ?>
Bu aşamaya kadar bir sorun yaşamadan ve konuyu anlayarak geldiyseniz artık örnek bir uygulama ile ezSQL’in fonksiyonlarını tanıyabiliriz.
Örnek uygulama olarak bilgisayarımda basit bir veritabanı (bilgiler) ve tablo (bilgi_tablosu) oluşturdum. Tablonun yapısını daha iyi anlayabilmeniz için resmini aldım.

Bu tabloyu elde edebilmek için aşağıdaki sql sorgusunu veritabanınızda çalıştırabilirsiniz.
CREATE TABLE `bilgi_tablosu` ( `no` int(11) NOT NULL, `isim` varchar(100) NOT NULL, `soyisim` varchar(100) NOT NULL, `rumuz` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `bilgi_tablosu` (`no`, `isim`, `soyisim`, `rumuz`) VALUES (1, 'Erhan', 'Yakut', 'yakuter'), (2, 'Hakan', 'Demiray', 'dmry'), (3, 'Erhan', 'Burhan', 'eburhan'), (4, 'Hamdi', 'Yaman', 'h-yaman');
Sıra geldi konunun can alıcı noktası olan ezSQL fonksiyonlarına. ezSQL işlemlerini dört temel metotla gerçekleştirir.
$db->query(query)
$db->get_var(query)
$db->get_row(query)
$db->get_results(query)
Bununla birlikte eğer ezSQL sınıfını kendi yazmış olduğunuz bir fonksiyonda kullanacaksanız fonksiyonun başına global $db; yazmayı unutmayın.
Şimdi site yapımında en çok ihtiyaç duyacağımız ezSQL fonksiyonları çıktılarıyla beraber görelim. Şunu da söylemeliyim ki ezSQL fonksiyonları benim aşağıda anlattıklarımla sınırlı değildir. Paketten çıkan yardım dosyasında daha fazla detaya ulaşabilirsiniz.
Örnek 1) Çoklu kayıtları çekme
<?php
$sonuclar = $db->get_results("SELECT isim FROM bilgi_tablosu");
foreach ( $sonuclar as $sonuc )
{
echo $sonuc->isim.",";
}
// Çıktı
/* Erhan,Hakan,Erhan,Hamdi, */
?>
Örnek 2)Tek satırdaki bilgileri çekme
<?php
$satir = $db->get_row("SELECT no,isim,soyisim FROM bilgi_tablosu WHERE no = '2' ");
echo $satir->no.") ".$satir->isim." ".$satir->soyisim;
// Çıktı
/* 2) Hakan Demiray */
?>
Örnek 3)Tek bir bilgiyi çekme
<?php
$kisi_sayisi = $db->get_var("SELECT count(*) FROM bilgi_tablosu");
echo "Kişi sayısı: ".$kisi_sayisi."<br>";
$sonuc = $db->get_var("SELECT soyisim FROM bilgi_tablosu WHERE no='3' ");
echo "3. kaydın soyismi ".$sonuc;
// Çıktı
/* Kişi sayısı: 4
3. kaydın soyismi Burhan */
?>
Örnek 4)Tabloya kayıt girme
<?php
$db->query("INSERT INTO bilgi_tablosu (no, isim, soyisim, rumuz) VALUES ('5','Veysel','Semiz','sanalduvar')");
// Çıktı
/* Bu islem sonucunda tabloya sırasıyla '5 Veysel Semiz sanalduvar' seklinde bir kayıt girilir. */
?>
Örnek 5) Kayıt güncelleme
<?php
$db->query("UPDATE bilgi_tablosu SET isim = 'Hamdicim' WHERE no = '4'");
// Çıktı
/* Bu islem sonucunda tabloda 'no' hanesi '4' olan satırdaki 'isim' değeri 'Hamdicim' olarak değiştirilir.*/
?>
Örnek 6) Son yapılan sorguyu ve eğer varsa çıktısını görme
<?php
$db->query("UPDATE bilgi_tablosu SET isim = 'Hamdicim' WHERE no = '4'");
$db->debug();
// Çıktı
/* ezSQL (v2.03) Debug..
Query [5] -- [UPDATE bilgi_tablosu SET isim = 'Hamdi' WHERE no = '4']
Query Result..
No Results*/
?>
Örnek 7) İşlem sonucunda sonucun yapısını ve içeriğini görme
<?php
$sonuclar = $db->get_results("SELECT * FROM bilgi_tablosu WHERE no='1'");
$db->vardump($sonuclar);
// Çıktı
/* Array
(
[0] => stdClass Object
(
[no] => 1
[isim] => Erhan
[soyisim] => Yakut
[rumuz] => yakuter
)
)
*/
?>
Örnek 8) Bir sütundaki değerleri alma
<?php
$sonuclar = $db->get_col("SELECT rumuz FROM bilgi_tablosu",0);
foreach ( $sonuclar as $sonuc )
{
echo $sonuc.",";
}
// Çıktı
/* yakuter,dmry,eburhan,h-yaman, */
?>
Örnek 9) Üsttekine göre daha hızlı bir şekilde bir sütundaki değerleri alma
<?php
foreach ( $db->get_col("SELECT rumuz FROM bilgi_tablosu",0) as $sonuc )
{
echo $sonuc.",";
}
// Çıktı
/* yakuter,dmry,eburhan,h-yaman, */
?>
Örnek 10) Veritabanının şemasını ve tablolarının özelliklerini görme
<?php
$db->select("bilgiler");
foreach ( $db->get_col("SHOW TABLES",0) as $tablo_ismi )
{
$db->debug();
$db->get_results("DESC $tablo_ismi");
}
$db->debug();
// Çıktı
/* Veritabanının şema halinde çıktısını verir */
?>
ezSQL sınıfı gördüğünüz gibi oldukça gelişmiş olmasının yanında son derece pratik bir kullanıma sahiptir. Ben size en temel ihtiyaçlarınızı giderecek fonksiyonları tanıttım. Daha fazla açıklama ile bu sınıfı daha iyi tanımak isterseniz indirmiş olduğunuz paketin içinden çıkan ez_sql_help.htm dosyasına bakabilir, sorularınız için Türkiye’deki programlama forumlarının (örn. turk-php) yanında ezSQL’in kendi forumunu da kullanabilirsiniz.
Bu yazıyı tamamladıktan sonra arama motorundan yaptığım araştırmada Yakup Gövler‘in de WordPress altyapısında ezSQL kullanımına değindiğini gördüm. Oraya da bir göz atarsınız.
ezSQL sınıfını buradan, örnek uygulama ile ilgili dosyaları ise şuradan indirebilirsiniz.
Saygılar, sevgiler…
Not: Lütfen bu yazıma, uygulama esnasında karşılaşmış olduğunuz hataları ve nasıl çözüleceğini sorduğunuz yorumlar yapmayınız. Bu ihtiyaçlarınızı forumlardan karşılamanızı rica ederim. Aksi takdirde malesef yorumlarınızı onaylamayacağım.
Not 2: Hergün gelen onlarca e-posta üzerine bu notu düşüyorum. Malum benimde bir işim ve kısıtlı bir zamanım olduğu için gerek e-posta yoluyla gerekse msn (wlm) vb. anlık iletişim kanallarıyla kişisel yardımda bulunmuyorum.
Genç yaşlarda programlama ile tanıştı ve Delphi ile başladığı programlama macerasına şuanda PHP, SQL, Javascript, AJAX, CSS, XHTML teknolojileri ile devam etmektedir. Elektrik - Elektronik bölümü mezunu olan "yakuter" 2006 yılından itibaren yakuter.com'un yazarlığını yapmaya başlamıştır.
yakuter
05 Temmuz 2008
Bazen makaleleri anlatırken basite indirgeyeceğim diye gereğinden fazla uzattığımı düşünüyorum. Umarım yine bu şekilde uzatmamışımdır.
@brsyuksel, yalın dediğine göre sanırım anlaşılabiliyor. Sevindim bunu duyduğuma.
Alisko
05 Temmuz 2008
güzel anlatım olmuş erhan abi, bundan sonraki çalışmalarımda kullanmayı deneyeceğim.
Mustafa
06 Temmuz 2008
iyi hoş ama normal dede bir vt dosyası oluşturup include ederek php nin dosyalarını kullanabiliyoruz fark nedir ? yada avantajı mysqli kutuphaneside kullanılabilir bu işlem için
yakuter
06 Temmuz 2008
Mesel bir php dosyasını dahil etmek değil, veriatbanı sınıfını projemizde çalıştırmak. Bu kütüphane getirmiş olduğu kolaylıklarla projemize hız kazandırır. Aksi takdirde php’nin mysql fonksiyonlarını kullanmaya kalkarsanız düzenli ve temiz kodlu projeler yerine dağınık ve anlaşılması zor kodlara boğulmuş projeler elde edersiniz.
Mustafa
07 Temmuz 2008
Cevabın için teşekkürler
peki mysqli kütüphanesini alırsak yinemi bu ezSQL tarzı sınıflar daha önde oluyor ?
yakuter
07 Temmuz 2008
@Mustafa, mysqli kütüphanesi oldukça geniş bir fonksiyon listesine sahip. Örnek vermek gerekirse sadece çekmiş olduğun sonucu görüntülemek için bile 14 tane fonksiyon bulunuyor. ezSQL çok daha sade bir kütüphane. Gereksiz fonksiyonlar yok denecek kadar az. Daha çok ihtiyaç duyulanlara yer verilmiş. Bununla birlikte insanlar yazım kuralları bakımından ezSQL’de daha rahat ettiklerini söylüyorlar. Malum mysqli biraz farklı.
Sonuç olarak çok gelişmiş ve detaylandırılmış fonksiyonlarla işimi görürüm diyorsan mysqli kullan. Ama ben bu zamana kadar yürüttüğüm projelerde hiç ezSQL’in bana sunduklarından fazla işleve ihtiyaç duymadım. Doğal olarak tavsiye edeceğim ezSQL’dir.
kell
08 Temmuz 2008
Merhaba, oldukça faydalı bir makale olmuş teşekkürler.
Peki merak ettiğim bir soru var. Bu sınıf, anlık online sayısı 1000+ olan bir sitede kullanılırsa nasıl olur performans açısından ?
yakuter
08 Temmuz 2008
@kell, bu sınıfı kullandığındaki performan ise normal bir veritabanı bağlantısı yaptığın andaki performans çok farklı değildir. Sonuçta ezSQL’i incelediğinde PHP’nin sunduğu MySQL bağlantı ve yönetim fonksiyonlarının daha derli toplu sunulması gibidir. Yani 1000+ sitelerde İster ezSQL’i kulllan, istersen direk PHP ve MySQL fonksiyonları kullan sonuç aynıdır. Fazla ziyaretçi girdiği için yavaşlama ezSQL kullansan da kullanmasan da gerçekleşir. ezSQL’in buna bir katkısı yoktur veya çok ama çok azdır.
kell
08 Temmuz 2008
teşekkür ederim yakuter
Gökhan
13 Temmuz 2009
@semih,
Neyi nasıl yapabiliriz anlayamadım ve merak ettim, açıklayabilir misiniz acaba?
@kell
ezSQL’in önbellek desteği de var. memcache gibi değil, diske kaydediyor. Bu da işe yarayabilir.
Serkan
29 Ekim 2009
Böyle makaleler benim gibi php ile yeni tanışanlar için çok harika. Çok teşekkürler…
Ahmet
05 Aralık 2009
Ayrıntılı anlatım için teşekkürler.Ama bir sorun çıktı.
Bu hatayı alıyorum.Çözümü hakkında fikri olan varmı?
Fatal error: Declaration of ezSQL_mysql::query() must be compatible with that of ezSQLcore::query() in C:\AppServ\www\ez_sql\ez_sql_mysql.php on line 263
yakuter
05 Aralık 2009
Kullanmış olduğun ezsql dosyalarında sorun olduğunu düşünüyorum. Dosyaların birbiriyle uyumsuz olduğundan bahsediyor. Baştan kurup denerseniz sorun çözülür sanırım.
Ahmet
06 Aralık 2009
Evet compatible olmadığını söylüyordu.Appsev i kaldırıp Xammp kurdum.Nedenini anlamadım ama düzeldi.Çok teşekkürler.
Muhittin
27 Ocak 2010
Hocam herhangi bir sorgunun mysql_error() veya mysql_errno() fonksiyonlarında gibi hata çıktısını alma imkanımız varmı? Kendi sitesini ve birçok kaynağı taradım ama bulamadım. En olmadı kendim ekleyecem :)
metin
06 Şubat 2010
arkadaşlar ben smarty ile beraber kullanıyorum falat get_result ile tpl ye foreach etmeye çalışınca hata alıyorum paket içinde smarty ile beraber kullanım anlatılmış fakat aynısını yapmama rağmen hata alıyorum :S
Batın
04 Ağustos 2010
Birşey farkettim, Ezsql da arama sorgusu yaparken baslik='%$kelime %' şeklinde çektirdiğimde hata veriyor.Bu şekilde nasıl kullanabilirim ezsql ı
Yazılan yazılardan ilk siz haberdar olun, yeni yazılar e-postanıza gönderilsin.
menchek
02 Eylül 2010
yakuter.com © 2006-2010 Erhan Yakut. Site tasarım Cenk Akyıldız - (Tema Bilgisi). Hosting sponsoru WebGrup.
Site içerisindeki içerikler izinsiz kopyalanamaz, alıntı yapılamaz.