PHP ile MySQL’den VERİ OKUMA
PHP ile MySQL’den veri okutma konusuna sıra geldiğinde ayrıca öğrenmemiz gereken mysql_result() MySQL’e gönderilen sorgudan geri gelen bilgileri depolar.Basit anlamda mysql_query() komurundan sonra bu komutu bilmemiz işimize yarar.Bir örnek ile öğrendiklerimizi sınıyalım.
<?php mysql_connect("localhost","root") or die ("MySQL'e bağlanamadım"); mysql_select_db("deneme2") or die ("MySQL'de veritabanını bulamadım"); $tablo="SELECT * FROM liste "; $sorgu=mysql_query($tablo); $sayi=mysql_num_rows($sorgu); print "<table align=\"center\" border=\"1\"> <tr> <td>Adı:</td><td>Soyadı</td><td>username</td><td>sifre</td><td>mail</td> </tr>"; $sayac=0; while($sayac < $sayi){ $degiskenler = array ( 1=> @mysql_result($sorgu, $sayac, "ad"), 2=> @mysql_result($sorgu, $sayac, "soyad"), 3=> @mysql_result($sorgu, $sayac, "username"), 4=> @mysql_result($sorgu, $sayac, "sifre"), 5=> @mysql_result($sorgu, $sayac, "mail") ); print "<tr> <td>$degiskenler[1]</td><td>$degiskenler[2]</td> <td>$degiskenler[3]</td><td>$degiskenler[4]</td> <td>$degiskenler[5]</td> </tr>"; $sayac++; } ?>
Aslına bakarsanız birazcık zor bir örnekle okuma işlemine başladık.Bu script liste tablosunda bulunan bütün değerleri bir tabloya basıyor.Yukarda adından bahsettiğimiz mysql_resul() komutundan hariç birde mysql_num_rows() komutunu kulllandık.Bu komut tabloda bulunana satır sayısını verir.Şimdi scriptimizi satır satır açıklayalım.
İlk önce MySQL’imize bağlanıyor ve hangi veritabanında işlem yapacağımızı belirtiyoruz.Daha sonra tablo değişkeninde tablonun bütün değerlerini seçili duruma getiriyoruz.mysql_query() komutu ile MySQL’e sorgu gönderiyoruz.Daha sonrada mysql_num_rows() komutu ile MySQL’de ki satır sayısını belirliyoruz.Bundan sonrada 5 sütünlu bir tablonun açıklayıcı satırını print komutu ile yazıyoruz.Bir while döngüsü ile tablomuzun devamını yazdırmak için kaç adet satır yapacağını önceden MySQL’in satır sayısını belirleyen komutun değişkenini yani sayi değişkenini yazıyoruz.Bundan sonra bir array ile tablomuzdaki değerleri değişkenlendiriyoruz.Burada ki püf nokta mysql_resul() komutunun içerisine ilk önce sorgudan dönen sonucu giriyoruz.Daha sonra tablomuzdaki hangi satırın okunacağını belirtiyoruz.Burası while döngüsünde değilde sabit olduğunda 0 sayısını alır yani tablodaki ilk satır değerlerini okuturuz.Ama biz burada while döngüsü kullandığımızdan dolayı sayac değişkeni koyduk.Sayac değişkenide sıfırdan başlayarak tabloda ne kadar satır varsa hepsini okuyacak.En sonunda da hanci sütun değerini okuyacağımızı belirtiyoruz.Bundan sonrası da fasa fiso.
Bu yöntem, Php’nin hızını düşürecektir.Çünkü bütün satırları tek tek okuyarak dizi değişkenlerde ki değişkenlere depoluyor.Bu işin daha kolay bir yöntemi var.Bu yönteme ilerde değineceğiz.
Şimdi tablomuzdan istediğimiz bir değişkenin satırında bulunan değerleri okutacağız.Bu örnek yukardaki örnekten daha basit bir uygulamadır.
<?php mysql_connect("localhost","root") or die ("MySQL'e bağlanamadım"); mysql_select_db("deneme2") or die ("MySQL'de veritabanını bulamadım"); $tablo="SELECT * FROM liste WHERE username='$kullanici_adi' and sifre='$parola'"; $sorgu=mysql_query($tablo); $degiskenler = array ( 1=> @mysql_result($sorgu, $sayac, "ad"), 2=> @mysql_result($sorgu, $sayac, "soyad"), 3=> @mysql_result($sorgu, $sayac, "username"), 4=> @mysql_result($sorgu, $sayac, "sifre"), 5=> @mysql_result($sorgu, $sayac, "mail") ); if($degiskenler[3]=="$kullanici_adi" && $degiskenler[4]=="$parola"){ print "Şu anda şifreli alandasınız."; } else{ print "Kullanıcı adı veya şifreniz yanlış"; } ?>
Burada tablo değişkeninde MySQL’e username ve sifre alanlarının ikisininde doğru olması durumunda o girilen satırın değişkenlerini bize veriyor.Yani bu programa bir form eklerseniz ve bu formda iki değişkenli bir login sayfası yaparsanız girdiğiniz değerler eğer MySQL’de varsa şifreli alana girilecek.Aksi durumda program hata verecektir.Birde burada bişeyi daha belirtmekte yarar olduğunu düşünüyorum.MySQL’e gönderilen sorgudan dönene sonuçları mysql_reslt() komutu ile alıyoruz.Bu komut, özellikle sorgu dönmediğinde browsera hata mesajı veriyor.Dolayısıyla bu hata mesajının ziyaretçilerimize gözükmesini istemeyiz.Onun için bu komutun başına @ işareti koyuyoruz.Önceden açıkladığımız gibi bu @ işareti program hata verirse browsera hata numarasını çıkarmıyor.
MySQL’de kullanmamızda yarar olduğunu düşündüğüm mysql_close() komutu vardır.Bu komut MySQL’e sağlamış olduğumuz bağlantıyı keser.PHP ile MySQL’e veritabanı açmamız, tablo oluşturmamızda mümkün.Veritabanı açmamız için gerekli olan kod mysql_create_db() bu komutu MySQL’ bağlandıktan sonra hemen kullanarak yapabilirsiniz.Tabi bunun içerisinede tırnak içerisinde veritabanımızın adını yazmamız gerekiyor.Tablo oluşturmak içinde mysql_query() komutu işimizi görür.Şimdi örnek bir uygulama ile işimize devam edelim.
<?php mysql_connect("localhost","root") or die ("MySQL'e bağlanamadım"); $tablo= "CREATE TABLE tablo( no int(10) unsigned NOT NULL auto_increment, adi varchar(12) NOT NULL default '', soyadi varchar(12) NOT NULL default '', tel_no int(11) NOT NULL default '0', KEY no (no) )"; switch ($veri){ case "veritabani"; if(mysql_create_db("deneme3")){ print "Veritabnı yaratıldı.Şimdi tabloyuda oluşturmak için <a href='?veri=tablo_olustur'>tıklayın.</a>"; }else{ print "Veritabanı yaratılamadı."; } break; case "tablo_olustur"; @mysql_select_db("deneme3"); if(mysql_query($tablo)){ print "Tablonuzda yaratıldı"; }else{ print "Tablo yaratılamadı"; } break; default: print " <form action='?veri=veritabani' method='post'> <input type='submit' value='Veritabanını Oluştur'> </form>"; } ?>
Bu scripti kaydedip adım adım ilerlediğinizde deneme3 adında bir veritabanı yaratıyor.İçerisinede tablo adında bir de tablo yerleştiriyor.
Önce MySQL’e bağlanıyoruz.Daha sonra yapacağımız tablonun kodunu tablo değişkenine giriyoruz.Bu tablo kodunda bilmediğimiz bir unsuru açıklayayım.Dikkat ettiyseniz en başta unsigned not null auto_increment ve sonunda KEY no (no) yazısı var.Bu MySQL’e girilen satırları saydırmaya yarar.Yani no diye bir sutun oluşturuyoruz ve MySQL’e her girilen bilgide 1 2 3 diye tabloda kaç adet veri girildiğiniz gösterir.MySQL’den veri silersenizde o eski verileride sayar.Daha sonra bir switch deyimi ile en sonda bir form butonu koyuyoruz.Veritabanı oluşması için if deyimi ile yararlanıyoruz.Eğer veritabanı oluştu ise diğer aşamaya geçmek için bir linki tıklıyoruz.Bu linkin gösterdiği adreste il önce oluşturduğumuz veritabanına bağlanıyoruz sonra da bir if deyimi ile tablonun oluşturulup oluşturulmadığını sınıyoruz.
İlk örneğimizin hız açısından yanlış hazırlanmış bir örnek olduğunu söylemiştik.Ama bu sizin bu konuyu kavramız açısından güzel bir örnekti.Gerçi bu hız farkını öyle 300 – 500 satırlık bilgi çekerken fazla belirli olmaz.ancak 5000 ve üzeri bilgi çekmelerde hız farkı gözle gürülebilir.Ama siz yinede hızlı çalışan örneklerden yararlanın.
<?php mysql_connect("localhost","root") or die ("MySQL'e bağlanamadım"); mysql_select_db("deneme2") or die ("MySQL'de veritabanını bulamadım"); $tablo="SELECT * FROM liste "; $sorgu=mysql_query($tablo); print "<table align=\"center\" border=\"1\"> <tr> <td>Adı:</td><td>Soyadı</td><td>username</td><td>sifre</td><td>mail</td> </tr>"; while ($degiskenler = mysql_fetch_row($sorgu)): print "<tr> <td>$degiskenler[0]</td><td>$degiskenler[1]</td> <td>$degiskenler[2]</td><td>$degiskenler[3]</td> <td>$degiskenler[4]</td> </tr>"; endwhile; print "</table>"; ?>
Bu örneği gördüğünüz gibi ilk örnekten daha kısa ve daha anlaşılırlı.Yine MySQL’e bağlanıyoruz ve hangi veritabanında işlem yapacağımızı gösteriyoruz.Daha sonra tablo değişkeninde tablonun hepsini işaretliyoruz.Sonrada sorgu değişkeniyle MySQL’e sorgu gönderiyoruz.Daha donra tablomuzun açıklama satırını yapıyoruz.Bundan sonra bir döngü ile mysql_fetch_row() komutu ile tablodaki değişkenlei bir dizi değişkenine depoluyoruz.Gördüğünüz gibi tektek mysql_result() komutu ile sorgulamadık.Burada mysql_fetch_row() komutu tabloda bulunan değerleri verdiğiniz izin gereğince dizi değişkenlere aktarır.Burada biz bu komutun yerine mysql_fetch_array() komutunuda kullanabilirdik.İki komutda aynı görevi görür.MySQL’den verileri listeleme işi için PHP 4.03 versiyonundan sonra bazı ek komutlar geliştirdi.Bunlardan biride mysql_fetch_assoc() komutudur.Şimdi bu işi birde bu komutla gerçekleştirelim.
<?php mysql_connect ("mehmet","root"); $result = mysql_db_query ("deneme2","select * from liste"); print "<table align=\"center\" border=\"1\"> <tr> <td>Adı:</td><td>Soyadı</td><td>username</td><td>sifre</td><td>mail</td> </tr>"; while ($degiskenler= mysql_fetch_assoc ($result)) { print "<tr> <td>$degiskenler[ad]</td><td>$degiskenler[soyad]</td> <td>$degiskenler[username]</td><td>$degiskenler[sifre]</td> <td>$degiskenler[mail]</td> </tr>"; } mysql_free_result ($result); ?>
Burada bilmediğimiz komutların ilki mysql_db_query() komutu tıpkı mysql_query() komutu gibi MySQL’e sorgu gönderir.Ama bundaki fark mysql_select_db() komutunu kullanmadan direkt olarak önce veritabanımızın adını giriyoruz sonrada MySQL komut satırını giriyoruz.While döngüsünde ise mysql_fetch_assoc() komutunu kullandık.Bu komut diğer dizi değişkenlerinden farkı dizi değişkenlerini sıralarken numaralandırma kullanmıyorda direkt sutun adlarını kullanıyor.Döngüden hemen sonra mysql_free_result() komutunu kullanmamızın nedeni hafızaya toplanan dizi değişkenlerini hafızadan boşaltmaktır.Bu komutu yukardada kullanmanızda fayda vardır.Tabi bu değişkenleri aynı sayfada bir yerlerde kullanmayacaksanız.
Leave a Reply