Bos sifre
degerlerinin oldugu varsayilir.
mysql_close ()
Veritabanina acilan baglantilar, programiniz calismasini
bitirince otomatik olarak sistemden kaldirilir. Baglantiyi
daha once kendi kontrolunuzde olarak kapatmak istiyorsaniz:
mysql_close ($link_id);
komutu ile programin veritabanina olan baglantisini sonlandirabilirsiniz.Bu
fonksiyon bir tek baglanti ismini argument olarak alir ve
o baglantiyi sona erdirir.
mysql_list_dbs ()
Bu fonksiyon daha onceki konularda gordugumuz MYSQL'in SHOW
DATABASES komutuna esdegerdir.Tek bir argument alir.Veritabani
sunucusuna baglanti referans verilerek (opsiyonel bir argument)
kullanilir.Bu fonksiyonun sonucunda veritabani sunucusundaki
butun veritabani isimleri bir dizinin elemanlari
olacak sekilde bir dizi degiskende saklanir : ($sonuc degiskeni)
$sonuc = mysql_list_dbs($link_id);
mysql_select_db()
Bu fonksiyon mysql sunucusunda bir veritabani secmek icin
kullanilir.Basarili olmasi halinde true yani dogru
-built in- sonucu doner.Basarisizlik haline false
yani yanlis -built in- degisken degeri degiskene atanir.Bu
fonksiyon secilmek istenen veritabani ismi ve sunucu baglanti
ismini argumnet olarak alir.(Sunucu baglanti ismi yani $link_id
opsiyoneldir.Eger kullanilmaz ise en son acilan veritabani
baglantisi ile islem yapilir.)
Egr herhangi bir veritabani baglantisi yapilmadan bu fonksyion
bir "veritabani ismi" ile cagrilirsa, fonksyion sunucuya
bir baglanti gerceklestirmek ister.
Simdi daha onceki konularimizda yarattigimiz "phpuser" isimli
hesap ve "phppass" sifresi ile sunucuya baglanmaya calisalim
:
$link_id = mysql_connect("localhost","phpuser","phppass");
if (mysql_select_db("mysql", $link_id) echo "Basarili sekilde
baglandi ve mysql isimli veritabani secildi"; else die ("Baglanti
hatasi olustu.");
Bu kod ile mysql sunucusuna baglanip "mysql" isimli veritabani
secilmektedir.(Biliyorsunuz bu veritabani icerisinde sunucu
icin kullanici izinleri saklanmaktadir.)
mysql_list_tables ()
Bu PHP fonksyionu, daha onceden gordugumuz MySQL hazir sunucu
fonksiyonu olan SHOW TABLES ile esdegerdir.Veritabani ve
baglanti isimleri fonksyiona argument olarak gecirilir :
$sonuc = mysql_list_tables ("mysql", $link_id);
Yukaridaki komutun sonucunda "mysql" isimli veritabanindaki
butun tablo isimleri bir karekter indeksli dizinin elemanlari
olacak sekilde $sonuc degiskeninde depolanmak uzere geriye
dondurulur.
mysql_num_rows ()
Bu fonksyion ile sorgu sonucunda donen "sonuc setindeki"
satir sayisini bulabiliyoruz.Argument olarak satir sayisi
hesaplanmak istenen "sonuc seti" girilmelidir :
$satir_sayisi = mysql_num_rows($sonuc);
SELECT sorgularinin sonucunda donen sonuc setleri
icin cok kullanisili bir fonksiyondur.
mysql_affected_rows ()
INSERT,UPDATE, veya DELETE sorgu komutlari kullanildiginda,
bu SQL sorgularinin sonucunda etkilenen satir sayisini bulabilmek
icin, mysql_num_rows () yerine mysql_affected_rows
() hazir fonksiyonu kullanilmalidir.Opsiyonel olarak
veritabani baglanti ismini argument olarak alir :
$satir_sayisi = mysql_affected_rows ($link_id);
Daha onceki konulardan da bildiginiz gibi DELETE komutu
WHERE ile kullanilmadiginda veritabani tablosundaki butun
kayitlari siler.Bu durumda mysql_affected_rows () fonksiyonu
0 (sifir) sonucunu dondurur.
mysql_fetch_row ()
Veritabanin'dan SQL komutlari ile secilen kayitlarin programa
dondurulmesi mysql_fetch_row () fonksyionu ile saglanir.
fetch : Turkcedeki git-getir manasina gelir.Daha
cok kedi kopek gibi hayvanlarin atilan bir cismi geri getirmesi
gibi oyunlarda emir kelimesi olarak kullanilir.
Bu hazir fonksiyon yanlizca sonuclarin dondurulmesinin istendigi
sorgu-sonucu-setini argument olarak alir.Bu komutun sonucunda,
sorgunun sonucunda eslesen satirlara ait veriler dizinin
elemanlari olacak sekilde doner.Daha fazla dondurecek satir
kalmadiginda (sorgunun sonucunda secilen butun satirlar
bittiginde) "false" -yanlis- degisken degeri doner.
$getirilen_satir = mysql_fetch_row($sonuc_seti);
PHP kendi icinde bir isaretleyeci kullanarak bir onceki
mysql_fetch_row () fonksiyonun dondurdugu satiri bilmektedir.Boylece
her seferinde bu fonksiyon cagrildiginda bir sonraki satira
gecilmektedir.Artik gececek satir kalmadiginda bu fonksiyon
false yani yanlis degerini dondurur.
Tum bu fonksyionlarin kullanildigi ornek bir program
yazalim
<?php
//listele.php
$db_host = "localhost";
$db_kullaniciadi = "phpuser";
$db_kullanicisifresi= "phppass";
$db_veritabaniadi = "turkphp_veritabani";
$baglantim = mysql_connect ("$db_host", "$db_kullaniciadi","$db_kullanicisifresi");
$sonuc=mysql_list_dbs($baglantim);
$satirlar = mysql_num_rows($sonuc);
while($db_verileri = mysql_fetch_row($sonuc)) {
echo $db_verileri[0]. "<BR>";
$sonuc2 = mysql_list_tables($db_verileri[0]);
$satirlar2 = @mysql_num_rows($sonuc2);
while ($tablo_verileri = @mysql_fetch_row($sonuc2)) echo
"--" . $tablo_verileri[0] . "<BR>";
echo "==> $satirlar2 tane tablo " . $db_verileri[0]
. "<P>";
}
?>
Programin calisan haline ulasmak icin :
http://www.turk-php.com/ornekler/mysql/listele.php
Program nasil calisiyor?
Yazilan program MySQL sunucusuna bizim sagladigimiz parametrelerle
baglaniyor : "localhost", "phpuser" ve "phppass".Kendi sunucunuz
icin ,bu yazi dizisinin basindan beri okuyorsaniz, muhtemelen
"phpuser" kullanicisinida diger makalelerde anlatilan sekilde
"phppass" sifresi ile yaratmis olmalisiniz.Degilse hemen
o makalelere donup bir mysql kullanicisi nasil yaratilir?
ogrenmelisiniz...
mysql_connect () fonksiyonu ile sunucuya baglandiktan sonra,
bu fonksyionun sonucunda donen baglanti link degerini diger
veritabani fonksiyonlarini kullanirken argument olarak kullanmayacagim.Bunun
nedeni bu fonksyionlara -zaten opsiyonel olarak- bir link
degeri verilmediginde, bunlarin en son acilan baglantiyi
kullanmalaridir...
$sonuc=mysql_list_dbs($baglantim);
Ornegin yukaridaki satirda opsiyonel olarak baglanti link
degerini ($baglantim degiskeni icerisinde saklaniyor) fonksiyona
gecirmisim. Bunu yapmamis olsaydim en son acilan baglanti
fonksiyon tarafindan otomatik olarak kullanilacakti...
$sonuc2 = mysql_list_tables($db_verileri[0]);
Yukarida da link baglanti degeri verilmeden($baglantim)
yazilan bir kod satiri goruyorsunuz.
Yapilan en buyuk hatalardan birisi yukaridaki programlama
pratiginde goruldugu sekilde, baglanti link ismi verilmeden
yapilan sorgu sonuclarinin sonucunda donen degerlerin bir
baska sonucun uzerine yazilmasidir.Nasil bir dosyayi birden
fazla baglanti ile aciyorsaniz, veritabani baglantilarini
da birden fazla kez yapabilirsiniz.Boylece bir sorgu setinin
sonucunda donen degeri dongu icine koydugunuzda, bir baska
sonuc setinin uzerine yazmamis olursunuz.Her baglanti ve
sorgu kendi biricik baglanti degerini tasidigi icin ozel
olarak baglanti degeri belirtilmedigi surece sorgu sonucunda
donen sonuc setleri bozulmadan kalabilecektir.
mysql_list_dbs () fonksiyonun donderdigi sonuc seti while
dongusunun icine alinmaktadir. Bu dongunun icine konulan
ikinci bir dongu ile (mysql_list_tables () fonksiyonun sonucunda
donen degerler) ilk dongunun sonucunda donen elementlere
teker teker bakilmaktadir.Boylece herbir veritabaninin sahip
oldugu tablolara bakilmakta ve ekrana yazilmaktadir.
@ isareti fonksiyonlarin sonucunda donebilecek olasi hata
mesajlarinin ekrana yazilmasini engellemek amaciyla konulmustur.
Serkan Hadi Ceylani
serkan@turk-php.com