Fonksiyonların Ayrıntıları
$db = new db -- Yeni bir veritabanı nesnesi oluşturur, veritabanı sunucusuna bağlanır ve bir veritabanını seçer.
Açıklama:
$db = new db(string kullanıcı_adı, string şifre, string veritabanı_adı, string veritabanı_sunucusu)
Bu ifade üç işlemi gerçekleştirir. (1) db isimli yeni bir veritabanı nesnesi oluşturur. (2) Bir veritabanı sunucusuna bağlanır. (3) Bir veritabanını seçer. Eğer ikinci bir veritabanı sunucusuna bağlanmak isterseniz, tekrar bu fonksiyonu kullanabilirsiniz yani aynı anda sunucuya iki bağlantı sağlayabilirsiniz. Ancak, eğer aynı sunucuda farklı veritabanlarını kullanmak isterseniz, veritabanları arasında geçiş yapmak için yeni db nesnesi oluşturmak yerine $db->select fonksiyonunu kullanmanız performans açısından daha iyi olacaktır.
Koddaki $db değişkeni yerine istediğiniz başka bir ismi de kullanabilirsiniz.
Örnek:
//localhost isimli sunucudaki wordpress isimli veritabanına, root kullanıcı adı ve 123 şifresi ile bağlantı kurar.
$vt = new db('root', '123', 'wordpress', 'localhost');
$db->select -- Çalışmak için yeni bir veritabanını seçer.
Açıklama
$db->select(string veritabanı_adı)
$db->select() fonksiyonu $db=new db() ile oluşturulmuş olan mevcut veritabanı bağlantısını kullanarak başka bir veritabanını kullanmayı sağlar.
Örnek:
//Users veritabanından ($db=new db ile kurulmuş bağlantıdaki) bir kullanıcının ismini alır
$user_name = $db->get_var('SELECT name FROM users WHERE id = 22') ;
// Stats isimli veritabanını seçer. Artık sorgu işlemleri bu veritabanı üzerinde gerçekleştirilir.
$db->select('stats');
// Stats veritabanından bir kullanıcının bilgisi alınır.
$total_hours = $db->get_var("SELECT sum(time_logged_in) FROM user_stats WHERE user = '$user_name'") ;
// Users veritabanı tekrar seçilir ve normal şekilde çalışmaya devam edilir.
$db->select("users");
$db->query --Veritabanına sorgu gönderir (eğer bir sonuç üretiliyorsa da önbelleğe alır).
Açıklama
boolean $db->query(string sorgu_cümlesi)
Seçili bulunan veritabanına sorgu gönderir. VT'ye kayıt ekleme, kayıt güncelleme, silme vb. işlemlerde kullanılır. Eğer sorgu sonucunda (örneğin SELECT sorgusu) bir sonuç döndürülürse bu sonuçlar depolanır, başka bir fonksiyon içerisinde sorgu yapılmadan bu sonuçlar kullanılır. Eğer bir sonuç üretilirse fonksiyon true, sonuç üretilmezse false değerini döndürür.
Örnek:
// Veritabanına yeni bir kullanıcı ekler
$db->query("INSERT INTO users (id,name) VALUES (1,'Amy')") ;
// Veritabanındaki bir kullanıcının bilgilerini günceller
$db->query("UPDATE users SET name = 'Tyson' WHERE id = 1") ;
// Bütün kullanıcı bilgilerini alır
$db->query("SELECT name, email FROM users") ;
// Üstteki sorgunun önbelleğe alınan sonuçları içerisindeki ikinci kaydı alır
$user_details = $db->get_row(null, OBJECT,1);
// $user_details değişkeninin yapısını ve değerini görüntüler
$db->vardump($user_details);
$db->get_var --Veritabanından ya da önbellekteki sonuçlardaki bir kayıttan tek bir değeri alır.
Açıklama
$db->get_var(string sorgu / null [, integer sütun_indeks, integer satır_indeks])
Veritabanından ya da önbellekteki sonuçlardan tek bir değerin alınmasını sağlar. Bu fonksiyon if ya da switch gibi karşılaştırma ifadelerinde sorgu sonuçlarını sınamak için yararlıdır. Sorgu sonucunda birden fazla kayda ulaşılırsa, varsayılan olarak birinci değer alınır. Sorgu sonucunda birden fazla sütuna ulaşılırsa, varsayılan olarak en soldaki sütun seçilir. Opsiyonel olarak sonuç içerisindeki istenilen satır ve sütundaki değer alınabilir.
Örnek:
-
// Veritabanındaki toplam kullanıcı sayısını alır.
-
$num_users = $db->get_var("SELECT count(*) FROM users") ;
-
-
// Sonuçlardan ikinci sıradaki kullanıcının e-mail adresini alır (not: sütun 1, satır 1 [satır 0'dan başlar])
-
$user_email = $db->get_var("SELECT name, email FROM users",1,1) ;
-
-
// Önceki sorgunun önbelleğe alınan sonuçları içerisinden ikinci kaydın bütün bilgilerini alır.
-
$user = $db->get_row(null,OBJECT,1);
-
// Aşağıdakilerin ikisinin de değeri aynı
-
echo $user_email;
-
-
// Amy isminde kaç kullanıcı olduğunu bulur
-
if ( $n = $db->get_var("SELECT count(*) FROM users WHERE name = 'Amy'") )
-
{
-
// Eğer kullanıcı bulunursa if cümlesi true değeri üretir. Böylece kaç tane kullanıcı olduğunu ya da olup/olmadığını test edebiliriz.
-
echo "$n tane ismi Amy olan kullanıcı var!";
-
}
-
else
-
{
-
// Eğer Amy isminde kullanıcı yoksa
-
echo "Amy adında hiç kullanıcı yok.";
-
}
Bu yazının kısa bağlantısı http://www.yakupgovler.com/?p=65.
Yazılarımı RSS aboneliği ile takip edebilir, yeni yazılarıma kolaylıkla ulaşabilirsiniz. Bunun için ise RSS adresimi kullanabilirsiniz.















Bu yazıya yapılan yorumları dilerseniz, ( 



Tarih: 27 Ekim 2007 Saat: 16:17
Merhabalar. ezSQL isimli sınıfı bir projemde kullanıyorum ama bir sorunla karşılaştım. utf8_general_ci ile oluşturduğum veritabanımda, gene utf8 ile kodlanan sayfamdan veri eklediğimde Türkçe karakterlerde problem yaşıyorum. WordPress'de bu sınıf modifiye edilerek kullanılmış ve gerekli ayarlar yapılarak Türkçe karakterlerdeki problem çözülmüş. Ancak ben bir türlü bu problemi aşamadım. Bir çözüm yolu biliyorsanız anlatabilir misiniz?
Şimdiden teşekkürler.
Tarih: 27 Ekim 2007 Saat: 20:57
WordPress'in dışında başka bir projede kullanmadığımdan böyle bir problemin varlığından haberim yoktu. Ceviz forumda yaptığım aramada aşağıdaki koda ulaştım ve bende başarılı oldu.
Veritabanı nesnenizi oluşturduğunuz satırın hemen altına bunu ekleyin, yani kodlarınız aşağıdaki gibi görünmesi lazım.
$db = new ezSQL_mysql('root','','deneme','localhost');
define('DILADI', 'utf8');
define('DILKARSILASTIRMASI','utf8_turkish_ci');
$db->query("SET NAMES '". DILADI. "'");
$db->query("SET CHARACTER SET " . DILADI);
$db->query("SET COLLATION_CONNECTION = '". DILKARSILASTIRMASI ."'");
Tarih: 27 Ekim 2007 Saat: 21:28
Çok teşekkür ediyorum. Denedim ve oldu. Karakter kodlamasını tanımlamayı düşündüm ama nerede kullanacağımı bilmiyordum. Tekrar tekrar teşekkür ediyorum. Bugün bütün gün kafamı ağrıtmıştı. Nasıl teşekkür etsem azdır
Tarih: 27 Ekim 2007 Saat: 21:31
Rica ederim, ben de birşeyler öğrendim.
Tarih: 12 Aralık 2007 Saat: 00:04
Merhabalar sayın hocam, gene bir problem yaşadım ve sizi rahatsız ettim. ezSQL ile herhangi bir recursive sorgu yaptığımda sorgu sonlanmıyor ve istediğim de olmuyor. Kodum şu şekilde:
function page_tree_list($page_id) {
global $db;
$pages = $db -> get_results("SELECT id, page_id, title FROM "._SQLPREFIX_."pages WHERE page_id = '$page_id' ORDER BY line ASC");
echo '';
foreach ($pages as $page) {
echo ''.$page -> title.'';
page_tree_list($page -> page_id);
}
echo '';
}
Ama normalde kendim bir sorgu yazdığımda problemsiz döngü sonlanıyor.
Eğer bu konuda bir bilginiz varsa yardımcı olabilirseniz sevinirim.
Görüşmek üzere...
Tarih: 12 Aralık 2007 Saat: 00:06
Afedersiniz galiba yukarıdaki yazım pek
Tarih: 12 Aralık 2007 Saat: 00:14
Afedersiniz klavyeme çay döküldü, tam yorum yazarken telaşa verdim eksik gönderdim, silebilirseniz sevinirim.
Recursive fonksiyon ile ilgili eksik bilgi verdim galiba.
Eğer sayfa herhangi bir sayfaya bağlı değilse page_id alanı 0 değerinde. Ama herhangi bir sayfaya bağlı ise page_id değeri bağlı bulunduğu sayfanın id'sine eşit.
Yani fonksiyonumuzu
page_tree_list(0);şeklinde çağırdığımızda buna benzer bir sonuç çıkması gerek:
Kök sayfa 1
- Sayfa 1 - 1
- Sayfa 1 - 2
-- Sayfa 1 - 1 - 2
Kök Sayfa 2
- Sayfa 2 - 1
-- Sayfa 2 - 1 - 1
-- Sayfa 2 - 1 - 2
- Sayfa 2 - 2
- Sayfa 2 - 3
Ama yukarıda yazdığım gibi sorgu sonuçlanmıyor.
Ayrıca yukarıda kodda ul ve li tagları çıkmamış.
Yardımlarınızı bekliyorum, teşekkürler.
Tarih: 12 Aralık 2007 Saat: 00:27
İlk bakışta bir hata yok gibi görünse de sorgunuza daha dikkatli baktığımda, sorgu sonucunda sonsuz döngü oluşuyor gibi geldi bana. Şöyle ki;
Fonksiyona ilk girdiğinde page_id=0 olanlardan birincisini aldı, dolayısıyla $page => page_id = 0 olur ve tekrar fonksiyona 0 değeri gönderilir. Acaba yanlış mı düşünüyorum?
Çözüm döngü içerisindeki page_tree_list($page -> page_id); ifadesini page_tree_list($page -> id); yapmanız olabilir.
Tarih: 12 Aralık 2007 Saat: 00:35
Aaa evet, nasıl oldu da gözümden kaçtı..
Hızlı cevap için teşekkürler Hocam.
Veriler listeleniyor ama, döngünün sonlandığı her noktada şu hatayı alıyırum:
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\root\card\admin\do_act\pages\new.php on line 20
20. satırdaki kodumuz ise;
foreach ($pages as $page) {Tarih: 12 Aralık 2007 Saat: 00:41
Sorgu boş döndüğünde for each döngüsü hata verecektir. Malum bilgi yoksa atama da yok, atama yoksa döngü de yok.
Bir if ile sorgunun boş olup olmadığını kontrol etmelisiniz.
if ($pages) {
foreach ($pages as $page) {
bla bla bla
} //for sonu
} // if sonu
Böyle ya da buna benzer bir kod ile sorgunun sonucunu kontrol etmelisiniz.
Tarih: 12 Aralık 2007 Saat: 00:47
İnanın çok yardımcı oldunuz. Geliştirmekte olduğum bir haber sisteminde kullanıyorum bu sınıfı. İki defa problem yaşadım ikisinde de çok yardımcı oldunuz. Biter bitmez size de göndermek isterim, incelemeniz ve yorum yapmanız hoşuma gider.
Tekrar tekrar teşekküler
Tarih: 12 Aralık 2007 Saat: 00:49
Projenizin bitmesini sabırsızlıkla bekliyor olacağım. Kendinize iyi bakın, projenizde başarılar.
Tarih: 12 Aralık 2007 Saat: 00:50
Çok teşekkürler
Tarih: 28 Aralık 2007 Saat: 16:22
Merhaba,
Siteme üye olanların verilerini mysql veri tabanında tutuyorum. Üyelerin çeşitli bilgileri yanında bir de e-posta adresleri var. Bu veritabanına sürekli eklemeler oluyor. Zaman zaman üyelerin veritabanında kayıtlı bulunan e-posta adreslerine toplu HTML mesaj göndermek istiyorum ancak bu konuda çok aramama karşın bir bilgi bulamadım. Yardımcı olabilir misiniz?
Teşekkürler ve iyi çalışmalar.
Tarih: 28 Aralık 2007 Saat: 17:18
Süleyman Bey,
PHP ve veritabanı bilginizin düzeyini bilmiyorum. Sitenize baktım, sanırım html ile tasarlanmış ama sanırım sizin üyelikten kastınız forumunuza üye olunması. Eğer böyleyse forumunuzun yönetim panelinde üyelere mail atma fonksiyonu olması lazım. Forum scriptleri ile aram iyi değil.
Yok eğer php ve veritabanı bilginiz varsa bu durumda PHP'nin mail() fonksiyonunu incelemenizi öneririm.
forum.ceviz.net adresinin php bölümünde sorunuzu sorarsanız ya da arama yaparsanız, html mail yollama ile ilgili bayağı bir konuya ulaşabilirsiniz.
Ayrıca http://www.dmry.net/php-ile-mail-gondermek adresinden php ile mail yollama hakkında ayrıntılı bilgi bulabilirsiniz.
Tarih: 29 Aralık 2007 Saat: 00:19
Tekrar merhaba. Konu, forum üyeliği ya da php ile e-posta yollamak değil. Amacım veri tabanında kayıtlı olan e-posta adreslerine -adresleri mysql'den almak kaydıyla- mesaj gönderecek yazılımı ya da scripti bulmak. Yine de yanıtınız için teşekkür ederim.
Tarih: 12 Şubat 2008 Saat: 11:30
Bu güzel döküman için teşekkürler.
Tarih: 26 Eylül 2008 Saat: 19:46
Merhabalar hocam ez sql ile çalışıyorum fakat farklı bir class oluşturup o class içerisinde get_results yada başka ez sql fonksiyonlarını çağırınca..
"Fatal error: Call to a member function get_results() on a non-object in"
hatası veriyor ez_sql.php yi bu classı oluşturduğum dosyada tanımladım...
iyi çalışmalar
Tarih: 27 Eylül 2008 Saat: 14:18
Fonksiyonlarınızda ezSQL sınıfını kullanmak için
$db değişkenini fonksiyon içerisinde global olarak tanımlamanız gerekir. Tabi buradaki $db sizin ezSQL'i kullanımınıza göre değişebilir.
Örnek:
function deneme() {
global $db;
$db->get_results(...
.
.
.
}
Tarih: 28 Eylül 2008 Saat: 14:58
Teşekkürler hocam 2. sayfada açıklamışsınız zaten..
kafama takılan bir nokta ise oluşturulan sorguları işi bitince kendisi yok ediyor
mysql_free_result($sorgu); tarzında bir ekleme yapmaya gerek kalmıyor dimi?
Tarih: 09 Şubat 2009 Saat: 18:54
ezSQL framework'une yeni başlıyorum. Bu konuda makaleniz gerçekten faydalı oldu elinize sağlık.
Benim bir sorum olacak;
mysql_fetch_assoc($id) ile database de girilmiş son id'yi alıyordum.
Bunu ezSQL de nasıl yapacağımı bulamadım?
Yardımcı olursanız sevinirim.
Teşekkürler
Tarih: 09 Şubat 2009 Saat: 19:03
foreach ( $db->get_col("SELECT uid FROM user order by uid desc limit 1",0) as $son )
{
echo $son+1;
}
şeklinde yaptım
Tarih: 17 Şubat 2009 Saat: 19:37
rand() kullanımı nasıl peki ezSQL sınıfında ?
Tarih: 17 Nisan 2009 Saat: 23:52
[...] Gerçekten güçlü bir sınıf olan ezSQL ile ilgili ayrıntılı bilgiye benim yazdığım makale'den ya da post2cat (post_id, category_id) VALUES (13, 2)"); ID'si 13 olan yazıyı siler. [...]
Tarih: 28 Nisan 2009 Saat: 17:55
Merhaba hocam. Sql kodlarını sql.php ye post ediyorum ve çalıştırılmasını sağlayama çalışıyorum fakat şöyle bir hata alıyorum;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"' at line 1 in C:\AppServ\www\sql\ez_sql_mysql.php on line 204
\"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"
burada slashlar var, onları temizletiyorum fakat yine hata alıyorum acaba sorun nedir? unutmadan;
"insert into kelimeler(sozcuk,karsilik)values('ceo','yonetici')"
bu kodu post ediyorum sayfaya ve $db->query($_POST["sql"]); şeklinde çalıştırmaya çalışıyorum :/
Tarih: 28 Nisan 2009 Saat: 18:26
@Ertuğrul, muhtemelen sunucunuzda magic_quotes özelliği açıktır. Bu nedenle gönderilen bütün form bilgileri otomatik olarak addslash işleminden geçiriliyordur. Yani
"insert into kelimeler(sozcuk,karsilik)values('ceo','yonetici')" şeklinde bir bilgiyi post ettiğinizde, diğer sayfadaki $_POST["sql"] değişkeninin değeri
\"insert into kelimeler(sozcuk,karsilik)values(\'ceo\',\'yonetici\')\"
olacaktır. Bu nedenle
$db->query($_POST["sql"]); şeklinde kullanmadan önce $_POST["sql"] değişkenini bir yazdırın eğer slash olan şekliyle geliyorsa bu değişkene stripslashes fonksiyonunu uygulamanız gerekir.
$db->query(stripslashes($_POST["sql"]));
şeklinde kullanmanız uygun olacaktır.
SQL ile ilgili uygulamalarda SQL sorgusunu çalıştırmadan önce oluşan SQL cümlesini echo ile yazdırmak her zaman hataları kontrol açısından önemlidir.
Sitenizi inceledim, çok güzel, çalışmalarınızın devamını ve başarılar dilerim.
Tarih: 28 Nisan 2009 Saat: 18:32
Teşekkürler hocam
Yakında daha güzel uygulama yayımlayacağım fakat biraz sorunlu
Bu arada dediğiniz gibi yaptım ( önceden de denemiştim ) problem devam ediyor :/ Ayrıca dediğiniz gibi sql kodlarını ( yani yolladığım kodlarıda ) kontrol ediyorum tabi;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')"' at line 1 in C:\AppServ\www\sql\ez_sql_mysql.php on line 204
yine de kodlarda problem var :/
Tarih: 28 Nisan 2009 Saat: 19:58
Herkesten çok özür diliyorum fakat çözümü buldum ve paylaşmak istiyorum;
Arkadaşlar ben kodu tırnaklı halde veriyormuşum;
"INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')"
fakat çift tırnak zaten karşı tarafta string olarak okunuyormuş tabi ki iki adet tırnakta hata veriyormuş.
INSERT INTO kelimeler(sozcuk, karsilik) VALUES ('speed','hiz')
diyerek direkt yolladım ve metin bazlı kabul edilerek okundu. iyi günler herkese.
Tarih: 09 Ekim 2009 Saat: 10:11
"Oldukça da güçlü bir sınıf olup, WordPress’in veritabanı alt yapısını da oluşturuyor."
. Doyurucu anlatımınız için teşekkürler.
Hocam bu cümlen kullanmak için yeterli bir sebep