PHP ve MySQL İlişkisi
Böylece, MySQL ile
bir veritabanı dosyası oluşturma işlemi bitmiş oldu. bir PHP
programı yazarak bu veritabanındaki kayıtları okutabiliriz.
Bunu yapmadan önce yine hızlı şekilde PHP-MySQL ilişkisinini
sağlayan fonksiyonlara gözatalım.
PHP programlarımızda veritabanından yararlanabilmek için
programın önce Web sunucusu aracılığıyla veritabanı dosyası
ile bağlantı kurması gerekir. Başka bir deyişle, PHP
programının veri ile arasında bir yol açması gerekir. MySQL
açısından ise bu bağlantı, veri sunucusunda yeni bir oturum
açılması anlamına gelir. İki program arasındaki bu ilişkiyi
PHP`nin mysql_connect() fonksiyonu yapar. Bu fonksiyonun
alabileceği üç parametre vardır:
php:
$veri_yolu = mysql_connect ("localhost" , "root" , "parola" );
Burada "localhost" yerine MySQL programının parçası
olarak çalıştığı sunucunun adı yazılır. "root" bu MySQL
sunucusunda açılacak oturumun kimin adına açılacağını belirter.
"root" kelimesi, sunucunun yönetici olarak oturum açılacağı
anlamına gelir: "parola" kelimesinin yerine de MySQL`i
kurarken belirlediğimiz bir kullanıcı parolası varsa, onu
yazarız. Bu komutta yer alan $veri_yolu değişkeni, açılacak
veri yolunun, PHP ile MySQL veritabanı sunucusu arasındaki
bağın tanıtıcı işareti olacaktır. Bu bağlantı kurulduktan
sonra, açtığımız veri yolundan gelecek bilgiler ve
veritabanına gidecek bilgiler bu değişken aracılığıyla
gerçekleşecektir. Veri sunucusu ile veri yolu bağlantısı
kurulursa, bu değişken değer tutar hale gelir; bağlantı
kurulamazsa bu değişken boş kalır. mysql_connect()
fonksiyonunun başarılı olup olmadığını bu değişkenin durumunu
sınayarak anlayabiliriz. Örneğin:
php:
$veri_yolu =mysql_connect("kara-murat", "root");
if ( ! $veri_yolu) die ("MySQL ile veri bağlantısı
kurulamıyor!);
Burada veri sunucusunun bulunduğu Web sunucusunun adının
"kara-murat" olduğuna, ve ooturumun "root" yetkileriyle
açıldığına dikkat edin. İkinci satırdaki if deyimi, $veri_yolu
değişkeninin değer içerip içermediğine bakıyor ve değişkende
bir değer yoksa, bağlantı kurma girişini durdurarak,
ziyaretçiye hata mesajı gönderiyor.
Bağlantı başarıyla kurulduktan sonra PHP programı, bu yoldan,
veritabanı sunucusuna, hangi veritabanı dosyasından
yararlanmak istediğini bildirmelidir. Buna veritabanı dosyası
seçme işlemi denir ve mysql_select_db() fonksiyonu ile
yapılır:
php:
mysql_select_db( "veritabanın_adı" , $veri_yolu ) or die
("Veritabanı açılamıyor!".mysql_error() );
Bu fonksiyonun başarıyla icra edilip edilmediği fonksiyondan
dönen değerin true/doğru veya false/yanlış olmasından anlarız.
Bu değer false ise bu deyimin die() bölümü icra edilecek ve
Browser penceresine veritabanının açılamadığı mesajıyla
birlikte MySQL`in hata mesajı da gönderilecektir. PHP`nin
MySQL veritabanını seçememesi çoğu zaman kullanıcı
yetkilerinin Internet ziyaretçilerini kapsayacak şekimde
düzenlenmemiş olmasından kaynaklanır. Bu durum gerçek Web
sunucusunda ortaya çıkarsa, Web sunucusu yönetimine başvurmak
gerekir.
Şimdi bu anlattıklarımızı biraraya getiren kolay bir PHP
programıyla biraz önce oluşturduğumuz "veri" adlı
veritabanından bir birinci kişiye ait verileri "okutarak, HTML
sayfamızda kullanalım. Aşağıdaki programı, veri_01.php adıyla
kaydedelim:
php:
<HTML>
<TITLE>PHP ile Veri Örnegi</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
</HEAD>
<BODY>
<?php
$veri_yolu = mysql_connect("kara-murat", "root");
if ( ! $veri_yolu ) die ("MySQL ile veri bağlantısı
kurulamıyor!");
mysql_select_db("veri" , $veri_yolu)
or die ("Veritabanına ulaşılamıyor!" . mysql_error() );
$sonuc = mysql_query("SELECT * FROM calisanlar",$veri_yolu);
printf("Adı: %s<br>n", mysql_result($sonuc,0,"adi"));
printf("Soyadı: %s<br>n", mysql_result($sonuc,0,"soyadi"));
printf("Adresi: %s<br>n", mysql_result($sonuc,0,"adres"));
printf("Görevi: %s<br>n", mysql_result($sonuc,0,"pozisyon"));
?>
</BODY>
</HTML>
Burada, mysql_connect() fonksiyonu ile "kara-murat" isimli
sunucuda root adına MySQL sunucu ile bağ kurduktan sonra mysql_select_db()
fonksiyonu ile bu bağı kullanarak veri isimli veritabanından
veri çekeceğimizi bildiriyoruz. Daha sonra mysql_query()
fonksiyonu ile bu veritabanındaki calisanlar isimli tablodan
herşeyi seçiyoruz ve seçilenleri $sonuc dizi-değişkeninde
topluyoruz. $sonuc değişkenin değerlerini görüntülemek için
PHP`nin özel bir fonksiyonu olan mysql_result() fonksiyonu
kullanıyoruz. Burada metin biçimlendirmekte yararlandığımız
printf() fonksiyonunu daha önce tanımıştık.
mysql_query() fonksiyonu, PHP`nin SQL dilini kullahnarak
veritabanı işlemleri yapmasını sağlayan başlıca aracıdır.
Yukarıda kısaca değindiğimiz bütün SQL komutlarıyla
yazacağımız bütün "query" deyimlerini bu fonksiyon ile icra
ettireceğiz. mysql_result() ise SQL değil, Data Manipulation
Language (DML) denen başka bir veri-biçimlendirme dilinin
inceliklerinden yararlanmamızı sağlar. Burada $sonuç
değişkeninde veritabanı kayıt biçiminde tutulan verileri PHP`nin
ve dolayısıyla HTML`in anlayacağı biçime çeviren bu
fonksiyondur.
Şimdi bu programı biraz geliştirilim ve daha önce kendi
kendine bilgi veren Form örneğimizi buraya uygulayalım; ancak
bu kez, ziyaretçimizin vereceği bilgileri veritabanına
ekleyelim; ve kendi adının veritabanına eklendiğini sayfadaki
tabloyu güncelleyerek bildirelim. Önce şu programı, veri_02.php
adıyla kaydedelim:
php:
<?php
// Form doldurulduktan sonra program buradan başlıyor
if ( isset ( $HTTP_POST_VARS )) {
$veri_yolu = mysql_connect("server", "root");
if ( ! $veri_yolu ) die ("MySQL ile veri bağlantısı
kurulamıyor!");
mysql_select_db("veri" , $veri_yolu) or die ("Veritabanına
ulaşılamıyor!" . mysql_error() );
$ekle = mysql_query("INSERT INTO calisanlar ( adi , soyadi ,
adres , pozisyon ) VALUES (`$adi`, `$soyadi`, `$adres`,
`$pozisyon` )", $veri_yolu );
echo ("
<HTML>
<HEAD>
<TITLE>PHP`de Veritabanı</TITLE>
<meta http-equiv=`content-type` content=`text/html; charset=ISO-8859-9`>
");
$sonuc = mysql_query("SELECT * FROM calisanlar", $veri_yolu);
echo ("
<TABLE>
<TR>
<TD><B>Uzmanın Adı</B></TD>
<TD><B>Çalıştığı Yer</B></TD>
<TD><B>Görevi</B></TD>
</TR>
n");
while ($satir = mysql_fetch_row($sonuc)) {
printf("<TR><TD>%s %s</TD><TD>%s</TD></TD><TD>%s</TD></TR>n",
$satir[1], $satir[2], $satir[3], $satir[4]);
}
echo ("
</TABLE>n
<p><B>Teşekkür ederiz.</B></P>
<A HREF=`index.php`>Ana sayfaya dönmek için tıklayınız</A>
");
}
// program ilk kez açılıyorsa buradan başlayacak
else {
echo ("
<HTML>
<HEAD>
<TITLE>PHP`de Veritabanı</TITLE>
<meta http-equiv=`content-type` content=`text/html; charset=ISO-8859-9`>
</HEAD>
<BODY>
<p><B>Mevcut Üyelerimiz</B></P>
");
$veri_yolu = mysql_connect("server", "root");
mysql_select_db("veri", $veri_yolu);
$sonuc = mysql_query("SELECT * FROM calisanlar", $veri_yolu);
echo ("<TABLE>
<TR>
<TD><B>Uzmanın Adı</B></TD>
<TD><B>Çalıştığı Yer</B></TD>
<TD><B>Görevi</B></TD>
</TR>
n");
while ($satir = mysql_fetch_row($sonuc)) {
printf("<TR><TD>%s %s</TD><TD>%s</TD></TD><TD>%s</TD></TR>n",
$satir[1], $satir[2], $satir[3], $satir[4]);
}
echo ("
</TABLE>n
<p></p>
<p><B>Siz de aramıza katılmak ister misiniz?</B></P>
<FORM ACTION=`$PHP_SELF` METHOD=`POST`>
<TABLE>
<TR><TD>Adınız: </TD><TD><INPUT TYPE=`TEXT` NAME=`adi`></TD></TR>
<TR><TD>Soyadınız: </TD><TD><INPUT TYPE=`TEXT` NAME=`soyadi`></TD></TR>
<TR><TD>İş Yeriniz: </TD><TD><INPUT TYPE=`TEXT`
NAME=`adres`></TD></TR>
<TR><TDALIGN=`left`>Göreviniz: </TD><TD><INPUT TYPE=`TEXT`
NAME=`pozisyon`></TD></TR>
<TR><TD ALIGN=`center`><INPUT TYPE=`SUBMIT` VALUE=`Defteri
imzala!`></TD><TD ALIGN=`center`><INPUT TYPE=`RESET` VALUE=`Tümünü
sil!`></TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
");
}
?>
Program, ilk kez çalıştığında, çalışmaya ikinci yarısındaki
else() deyiminden itibaren icra ediliyor; ziyaretçilerimize
mevcut üyelerimizin listesini veriyor ve üye olmak isteyip
istemediğini soruyor. Arzu edenin üye olabilmesi için gerekli
Form`u da sunuyoruz.
Programın her iki bölümünde de veri okuyan ve bunu
görüntüleyen, yani programın canalıcı noktası, mysql_fetch_row()
fonksiyonudur. PHP`nin DML araçlarından olan bu fonksiyonun
marifeti, bir veritabanından elde edilen sonucu satır-satır
okumasıdır. Nitekim, burada bu fonksiyondan dönen değeri
$satir adını verdiğimiz dizi-değişkene yazıyoruz ve sonra
printf() bu dizinin elemanlarını sırayla Browser penceresine
gönderiyor. (Burada olduğu gibi $satır değişkenin içinde kaç
kaç sütun olduğunu bildiğimiz durumlarda printf() fonksiyonunu
döngüsüz kullanmak mümkündür. Ancak veritabanının sütun
sayısını bilmiyorsak bunu sözgelimi count($satir) yoluyla
öğrenip, bu bilgiyle bir for döngüsü kurmak yerinde olur.
Programın iki bölümü arasındaki tek fark, $HTTP_POST_VARS
dizi-değişkeninin bir değer tutması halinde (yani ziyaretçi
sayfayı açtığında karşısına çıkan Form`u doldurduğu ve
gönderdiği zaman) çalışan birinci bölümünde, mysql_query()
fonksiyonunun bu kez veritabanı dosyasına ziyaretçinin verdiği
bilgileri işlemek üzere farklı bir SQL deyimi içermesidir.
Nasıl yazıldığını daha önce ele aldığımız bu fonksiyon "calisanlar"
tablosundaki dört alana elimizdeki dört değişkenin değerlerini
SQL`in INSERT komutuyla ekliyor.
PHP`nin MySQL ile yapabileceğimiz veritabaynı yönetimi için
20`ye yakın fonksiyonu vardır; MySQL de bu fonksiyonlar
yardımıyla çok sayıda iş yapabilir.
Bu konuya son verirken, Form örneğindenden farklı olarak
yukarıdaki veritabanı örneğinde ziyaretçinin gireceği
bilgilerle ilgili güvenlik önlemleri alınmadığına dikkatinizi
çekerim.
|