Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

ezSQL Veritabanı Sınıfının Kullanımı

5 min read



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 ile tanışma

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.

Gerekli dosyalar

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.

ezSQL’i uygulamalarımıza dahil etme

ezSQL DosyalarYukarı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]<?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);
?>[/php]

Örnek uygulama

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.
ezSQL Tablosu
Bu tabloyu elde edebilmek için aşağıdaki sql sorgusunu veritabanınızda çalıştırabilirsiniz.
[php]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’);[/php]

ezSQL Fonksiyonları

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]<?php
$sonuclar = $db->get_results("SELECT isim FROM bilgi_tablosu");
foreach ( $sonuclar as $sonuc )
{
echo $sonuc->isim.",";
}
// Çıktı
/* Erhan,Hakan,Erhan,Hamdi, */
?>[/php]

Örnek 2)Tek satırdaki bilgileri çekme
[php]<?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 */
?>[/php]

Örnek 3)Tek bir bilgiyi çekme
[php]<?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 */
?>[/php]

Örnek 4)Tabloya kayıt girme
[php]<?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. */
?>[/php]

Örnek 5) Kayıt güncelleme
[php]<?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.*/
?>[/php]

Örnek 6) Son yapılan sorguyu ve eğer varsa çıktısını görme
[php]<?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*/
?>[/php]

Örnek 7) İşlem sonucunda sonucun yapısını ve içeriğini görme
[php]<?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
)

)
*/
?>[/php]

Örnek 8) Bir sütundaki değerleri alma
[php]<?php
$sonuclar = $db->get_col("SELECT rumuz FROM bilgi_tablosu",0);
foreach ( $sonuclar as $sonuc )
{
echo $sonuc.",";
}

// Çıktı
/* yakuter,dmry,eburhan,h-yaman, */
?>[/php]

Örnek 9) Üsttekine göre daha hızlı bir şekilde bir sütundaki değerleri alma
[php]<?php
foreach ( $db->get_col("SELECT rumuz FROM bilgi_tablosu",0) as $sonuc )
{
echo $sonuc.",";
}

// Çıktı
/* yakuter,dmry,eburhan,h-yaman, */
?>[/php]

Örnek 10) Veritabanının şemasını ve tablolarının özelliklerini görme
[php]<?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 */
?>[/php]

Sonuç

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.



Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer