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:
$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:
$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 oturumun "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:
mysql_select_db("veritabanın_adı",$veri_yolu) or
die ("Veritabanina ulasilamiyor!" .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:
<HTML>
<TITLE>PHP ile Veri Örnegi</TITLE>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9">
<meta http-equiv="Content-type" content="text/html; charset=windows-1254">
</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 ("Veritabanina ulasilamiyor!" . mysql_error() );
$sonuc = mysql_query("SELECT * FROM calisanlar",$veri_yolu);
printf("Adi: %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("Gorevi: %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.
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ştirelim 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
// 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() );
$sorgu = "INSERT INTO calisanlar (adi , soyadi , adres , pozisyon) ";
$sorgu = $sorgu."VALUES ('$adi', '$soyadi', '$adres', '$pozisyon' )";
$sonuc = mysql_query($sonuc);
echo ("
<HTML>
<HEAD>
<TITLE>PHP'de Veritabanı</TITLE>
<meta http-equiv='content-type' content='text/html; charset=ISO-8859-9'>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1254'>
");
$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>";
printf "<TD>%s %s</TD>";
printf "<TD>%s</TD>";
printf "<TD>%s</TD>";
printf "</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'>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1254'>
</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 veritabanı
yönetimi için 20'ye yakın fonksiyonu vardır; MySQL de bu fonksiyonlar yardımıyla
çok sayıda iş yapabilir.
Php'de kullanılabilecek MySQL Komutları
| mysql_affected_rows |
Bir önceki işlemde etkilenen satır sayısı |
| mysql_close |
Belirtilen MySQL bağlantısını kapatır |
| mysql_connect |
Sunucuya veritabanı bağlantısı açar |
| mysql_create_db |
MySQL'de veritabanı açar |
| mysql_data_seek |
Sonuç satırında belirtilen sıraya geçer |
| mysql_db_query |
MySQL'e sorgu gönderir |
| mysql_drop_db |
Sunucudan veritabanı siler |
| mysql_errno |
Bir önceki işlemdeki MySQL hata numarasını verir |
| mysql_error |
Bir önceki işlemdeki MySQL hata mesajını verir |
| mysql_fetch_array |
Sonuçları dizi değişkeni olarak alır |
| mysql_fetch_field |
Sonuç tablosundaki alan adını obje olarak alır |
| mysql_fetch_lengths |
Sonuç tablosundaki dizi değişkenin uzunluğunu alır |
| mysql_fetch_object |
Sonuç satırını obje olarak alır |
| mysql_fetch_row |
Sonuç tablosundan dizi değişkeni olur |
| mysql_field_name |
Sonuç tablsundaki sonucun tablodaki alan adını verir |
| mysql_field_seek |
Sonuç tablosunda sıra indisini belirtilen yere götürür |
| mysql_field_table |
Alan adı verilen sonucun tablo adını verir |
| mysql_field_type |
Sonuçtaki alanın hangi tip olduğunu belirtir |
| mysql_field_flags |
Sonuçtaki alanın hangi tür ekstra parametrelerle tanımlandığını belirtir |
| mysql_field_len |
Sonuçtaki alanın veritabanındaki uzunluğunu verir |
| mysql_free_result |
Sonuçlar için atanan hafızayı boşaltır |
| mysql_insert_id |
Bir önceki veri yerleştirmede oluşan otomatik veri değerini verir |
| mysql_list_fields |
Sonuçtaki tüm tablo alanlarını listeler |
| mysql_list_dbs |
Sunucudaki tüm veritabanlarını listeler |
| mysql_list_tables |
Veritabanındaki tüm tabloları listeler |
| mysql_num_fields |
Sonuçtaki alan sayısını verir |
| mysql_num_rows |
Sonuçtaki satır sayısını verir |
| mysql_pconnect |
Sunucuya kalıcı bir bağlantı tanımlar |
| mysql_query |
Veritabanına sorgu gönderir |
| mysql_result |
Sorgudan dönen sonuçları alır |
| mysql_select_db
| Sunucudan veritabanı seçer |
| mysql_tablename
| Verilen alanın ait olduğu tablo adını verir |
MySQL Yönetimi
Tüm SQL işlemleri için Php kullanılabileceği gibi
veritabanı sunucusunda veritabanı, tablo oluşturmak, değiştirmek ya da diğer
işlemler için farklı arayüzler kullanmak zaman kazandırıcı olabilir. Php
kullanılarak geliştirilen PhpMyAdmin sayesinde web sunucu aracılığıyla tüm MySQL
özelliklerini yönetebilmek mümkündür. Hem Unix hem de Windows ortamları için
PhpMyAdmin tavsiye edilir. Windows'da da MySQL'i yönetmek için myAdmin adındaki
yazılım da oldukça kullanışlıdır. MySQL'e ve Php'ye yeni başlayan kullanıcılar
için veritabanını tanımak amacıyla ayrı bir yazılım kullanmaları tavsiye
edilebilir.
5.3. PHP MyAdmin Kurulumu
MySQL veritabanının yönetiminde, UNIX ve Windows
sistemler altında çalışan farklı programlar mevcuttur. Bunlardan biri olan
phpMyAdmin, PHP ile yazılmış olması, platformdan bağımsız çalışması, kolay
kurulabilmesi ve kolay kullanılabilmesi ile öne çıkıyor. Şu anda 2.1.0 sürümü
mevcut olan phpMyAdmin programını www.php.org.tr adresinden temin edebilirsiniz.
Programı indirip ZIP dosyasını (ya da .tar.gz)
açın. Apache sunucu kullanıyorsanız, phpMyAdmin’i kopyaladığınız klasörü
httpd.conf dosyası içinde;
Alias /myadmin/ “/programın olduğu klasör/”
Biçiminde tanımlamalısınız. Burada myadmin yerine
istediğiniz herhangi bir sözcük kullanabilirsiniz. PWS kullanıyorsanız, Gelişmiş
bölümünden Klasör ekle seçeneğini kullanarak phpMyAdmin’in yer aldığı klasörü
kolayca tanıtabilirsiniz. Klasörü tanıtırken, “Yürütme” hakkını vermiş
olduğunuzdan emin olun.
2. adım, config.inc.php dosyasını inceleyeceğiz:
$cfgServers[1]['host'] = 'localhost'; // MySQL’in bulunduğu sunucu
$cfgServers[1]['port'] = ''; // MySQL port’u
$cfgServers[1]['adv_auth'] = false;
$cfgServers[1]['stduser'] = '';
$cfgServers[1]['stdpass'] = '';
$cfgServers[1]['user'] = ''; // MySQL kullanıcısı
$cfgServers[1]['password'] = ''; // MySQL şifresi
$cfgServers[1]['only_db'] = '';
Burada bizi ilgilendiren üç tane ayar var.
Birincisi ‘host’, yani MySQL veritabanımızın bulunduğu bilgisayarın ismi. Bu bir
IP numarası da olabilir. Kendi bilgisayarınızda kurduğunuz yerel MySQL’de
çalışıyorsanız, buradaki ayarı ‘localhost’ olarak bırakabilirsiniz. İkinci ayar,
‘user’, phpMyAdmin’in hangi MySQL kullanıcısını kullanarak veritabanı ile bilgi
alışverişi yapacağını belirler. UNIX sistemlerde bu işletim sistemi
kullanıcısından farklı bir kullanıcıdır ve MySQL için ayrıca tanımlanır. Son
ayar ‘password’ ile bu kullanıcı ile birlikte kullanılacak şifreyi belirler.
HTTP sunucumuzun ve MySQL’in çalışır durumda
olduğundan emin olduktan sonra, tarayıcımızın adres bölümüne
“http://localhost/myadmin/” yazarak phpMyAdmin’i çalıştırıyoruz.
Burada veritabanımızın adını “phptr” koyuyoruz ve
“Create Database” diyerek veritabanını yaratıyoruz. Karşınıza çıkan bir sonraki
ekran, veritabanını yöneteceğiniz ekrandır. Sol tarafta MySQL’e kayıtlı bütün
veritabanlarının ve onların içindeki tabloların listesi bulunuyor. Biz de ilk
tablomuzu yaratalım. Ekranın alt bölümündeki “Create new table on database
phptr” bölümünden, yaratacağımız tablonun ismini ve alan sayısını belirterek
“Go” diyoruz:
Tablomuza test ismini verdik ve 3 alan
kullanacağımızı belirledik. Bundan sonraki ekranda, tablonun alanlarının
özelliklerini belirleyeceğiz. Buradan alan tipini, uzunluğunu (length), işaret
alıp almayacağını (unsigned), öntanımlı değerini (default), otomatik-artan değer
olup olmadığını (auto-increment), key, index ve unique özelliklerine sahip olup
olmayacağını belirleyebiliriz:
Böylece phpMyAdmin ile ilk tablomuzu yaratmış
olduk. En önemli özelliğiyse sona sakladık: bir text dosyasının içine
kaydedilmiş veritabanı yapısını ve varsa kayıtları olduğu gibi MySQL’e boca
edebilmesi. Bu işlem, mysqldump komutuyla benzerdir.
Bu işleme örnek olarak, zdefteri.sql dosyamızın
içindeki Ziyaretçi Defteri programımızın veritabanı yapısını MySQL’e nasıl
geçireceğimize bakalım:
Sol bölümden veritabanımızı seçiyoruz ve karşımıza
çıkan ekranda, çalıştırmak istediğimiz SQL komutlarının bulunduğu dosyanın
ismini kutucuğa yazıyoruz. PhpMyAdmin dosyayı otomatik olarak açacak ve
işleyecektir.
PhpMyAdmin ile ilgili bilmeniz gereken temel
işlemler bu kadar. Kullanımı oldukça kolay bu program, aynı zamanda yapılan
sorgulamaları gizlemeyip ekrana SQL kodu olarak da döktüğü için, SQL bilginizin
gelişmesine de katkısı olacaktır.