Temel Veritabanı Komutları
Bu dersimizde php nin en önemli konusu veritabanına erişim veri alış verişi sorgulama ve düzenleme ile ilgili konulara yer vereceğiz.
Veritabanı neden önemli ? Bu sorunu cevabı basit çünkü veri değerli. Hatta dünyanın en önemli hazinesi de diyebiliriz. Dünyada en çok hit alan siteler veri depolayıp kategorilere başlıklara ayaran ve bunların istatistiklerini yapan siteler örnek mi google desem kafi olur herhalde. Bu nedenle bilgiyi depolamak ve talep edildiğinde sunmak bir web sayfasından beklenen en önemli şey. [...]
Burada da işin içine dinamik web sayfaları giriyor yani değişken web sayfaları. Yine google dan örnek verecek olursak; Mesela arama kutusuna herhangi bir kelime yazıp arattığımızda o kelime ile alakalı yüzlerce site karşımıza çıkıyor fakat arama sayfasının tasamı hiçbir zaman değişmiyor tek bir sayfa da yüzlerce binlerce farklı yazı görüyoruz. Yani arattığımız kelimeye göre içerik değişiyor. Hatta bazı siteler 2 sayfadan oluşmasına rağmen yüzlerce sayfadan oluşuyor gibi görünüyor fakat işin aslı bu değil. İki sayfa dan oluşuyor site fakat aynı sayfaya farklı bir mantıksal değer(değişken) gönderildiğinde sayfanın tasarımı içeriği tamamen değişiyor. Bu nasıl mı oluyor php ile tasarım o sayfa için yeniden oluşturuluyor örneğin
bir tablonun renk değeri #FF0000 olsun bu değer veri tabanında tutuluyor ve belirli bir mantıksal değer o sayfaya gönderildiğinde aslında o sayfa veri tabanından git ve #FF0000 değerini al gibi bir emir veriliyor. Bunu çeşitlendirmek mümkün boyutlar,yazı tipleri,resim isimleri,hatta buton isimleri. Birçok CMS mesele PHP Nuke bu sistemle çalışır. Dinamik site hakkında bu kadar bilgi yeterli sanırım. Biz konumuza gelelim. PHP veri tabanına nasıl hükmedicez?
Veri tabanına hükmetmek için önce bir bağlantı kurmamız gerekir PHP birçok veri tabanı ile ilişkili olarak çalışabilir fakat biz en sık kullanılanı ve en uyumlusu olan mysql e bağlantı yapıcaz.
CODE:
<? $baglanti=mysql_connect($hostname,$kullaniciadi,$sifre); ?>
Evet mysql bağlantısını yapmak için bu komutu kullanacağız.
$hostname,$kullaniciadi,$sifre ne anlama geliyor?
$hostname sizin domain isminiz yani buraya string olarak domain adresiniz girmeniz gerekir. Eğer evde kendiniz bir apache server kurduysanız genelde buraya localhost yazılır. Fakat bir web sunucusunda bağlantı yapmak isterseniz buraya ve sunucunuzun size verdiği domaini string olarak yazmalısınız. Yukarda kullandığım şekliyle
yani değişkende domaininizi tutarak da bunu yapabilirsiniz. Gelelim
$kullaniciadi ve
$sifre değişkenlerine bu değişkenlerin yerinede ister direk web sunucunuzun size vereceği kullanıcı adı ve şifresini yazabilirsiniz ister yukarıda kullandığım gibi kullanıcı adı ve şifrenizi değişkenlere atarak kullanabilirsiniz.
$baglanti değişkenini de bağlantıya bir etiket vermek için kullandık tam karşılamasa da böyle tabir edebiliriz.
Böylece veri tabanına bağlanmayı öğrendik. Kalıcı bir bağlantı yapmak içinde
CODE:
<?$baglanti=mysql_pconnect($hostname,$kullaniciadi,$sifre); ?>
komutunu kullanabilirsiniz. Siz bağlantıyı sonlandırmadıkça bağlantı hep aktif kalacaktır. Hazır yeri gelmişken bağlantıyı sonlandırmak içinde
CODE:
<?mysql_close($baglanti); ?>
komutu kullanılır. İşte daha önce oluşturduğumuz
$baglanti değişkeni burada işimize yaradı. Gelelim bağlandığımız sunucudan veri tabanını seçmeye bunun içinde mysql_select_db() komutu kullanılmaktadır. Komutun kullanılışı şöyle
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
// suucuya bağlandık veri tabanını seçelim.
mysql_select_db("veri tabanı ismi");
?>
kodda görüldüğü gibi
mysql_select_db() argüman olarak mysqlde tablolarınızın içinde bulunduğu veri tabanını ismini alıyor. Veri tabanınıda seçtikten sonra artık veri tabanına nasıl sorgu göndercez bunu öğrene biliriz. Veri tabanına sorgu göndermek için
mysql_query() komutu kullanılır. Bu kmutun kullanımı şöylerdir.
CODE:
<?
$sql="select * from tablo where id='1'";
$sorgu=mysql_query($sql,$baglanti);
//yada
$sorgu=mysql_query("select * from tablo where id='1'",$baglanti);
?>
şeklinde kullanılabilir. Simdi ne yaptığımıza bakalım bu komutun yaptığı iş basit mysql e sql sorgusu gönderiyor. ve $sorgu dizisine atıyor. Artık $sorgu değişkenimizde sql cümlesindeki anlam yüklü dilediğimiz gibi kullanabiliriz. Sql cümlelerinin ne anlama geldiği şimdilik bizim için önemli değil bunu başka bir derste anlatmayı uygun görüyorum. Fakat sadece bu sorgu için söylemek gerekirse tablo isimli tablodan id alanı 1 olan satırdaki tüm bilgileri alıyor. Şimdide bu sorguda kaç satırlık bilgi var bunu öğrenelim
CODE:
<?
$sql="select * from tablo where id='1'";
$sorgu=mysql_query($sql,$baglanti);
//yada
$sorgu=mysql_query("select * from tablo where id='1'",$baglanti);
$satir_sayisi=mysql_num_rows($sorgu);
?>
Evet artık elimizde sorgu ile kaç tane Satırı veri tabanından çektiğimizi veren bir değişken var yani
$satir_sayisi değişkeni bize kaç tane kaydı veri tabanından çektiğimizin bilgisini veriyor. bu ne işimize mi yarayacak? Mesala çektiğimiz verileri sıralarken for döngüsünde son değer olarak kullanabilir. (tabi eğer tüm veriler sıralanacaksa for döngüsü kullanmanızı tavsiye etmiyorum bun yerine while kullanırsak daha profesyonel olur.) Şimdide çektiğimiz verileri nasıl düzenli bir hale getirip sayfamızda göstereceğiz bunu görelim
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
$sql="select * from tablo where id='1'";
$sorgu=mysql_query($sql,$baglanti);
//Buraya kadar yukarıda anlattığım komutları aynen kulanıyorum.
$sonuc=mysql_result($sorgu,0,0);
echo $sonuc;
?>
Evet
$sorgu dizisizinden veriyi almak için kullanılan yöntemlerden biri bu yani
mysql_result() komutu bu komutun ne yaptığına gelince
$sorgu dizisinden bir matris formatı gibi belirlenen hücrede ki veriyi
$sonuc değişkenine alıyor yani 0,0 koordinatlarındaki veriyi alıyoruz. Burada ilk "0" satırın adresini ikinci "0" ise sütunun koordinatını belirtiyor. Yani
mysql_result($sorgu,1,3) yazsaydık 2. satır 4. sütundaki veriyi alırdık. Şimdide başka bir yöntemden söz edelim daha doğrusu başka bir koddan söz edelim.
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
$sql="select * from tablo where id='1'";
$sorgu=mysql_query($sql,$baglanti);
$sonuc=mysql_fetch_array($sorgu);
echo $sonuc["name"];
echo $sonuc["sifre"];
?>
Gelelim bu kodun açıklamasına veri tabanındaki tablomuzun adını tablo olduğunu varsayalım ve bu tablo da id , name , ve sifre alanları(sütunları) mevcut diyelim. Kodda kullandığımız
mysql_fetch_array($sorgu komut $sorgu dizisindeki değerleri satır satır okur ve
$sonuc dizisine atar. ve name alanın da ki veriyi ekranda yazdırmak için echo içerisinde
$sonuc["name"] gibi bir değişken kullanırız. Benzer şekilde sifre alanı içinde
$sonuc["sifre"] kullanılır. Eğer sorgumuzda 1den fazla satır var ise ve verileri ardı ardına sıralamak istiyorsak kodumuzda bir döngü çalıştırmalıyız örneğin;
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
$sql="select * from tablo";
$sorgu=mysql_query($sql,$baglanti);
while ($sonuc = mysql_fetch_array($sorgu)) {
echo $sonuc["name"];
echo $sonuc["sifre"];
}
?>
Yukarıdaki kodda sizinde fark ettiğiniz gibi sql cümlemizi biraz değiştirdik ve tablo isimli tablodaki tüm değerleri $sorgu dizisine çektik. Gelelim döngü kısmına ben bu kodda while döngüsünü uygun gördüm çünkü tüm tablodaki verileri sıralamak istiyoruz. while ın şartına gelelim. Görüldüğü gibi
mysql_fetch_array($sorgu) komutunun okuyacağı satır bitene kadar döngümüz devam ediyor. Yani $sorgu dizisinden her defasında 1 satır okunuyor ve o da buluna name ve sifre sütunlarındaki veriler yazdırılıyor. Şu anda en sık kullanılan yöntem bu. Değerleri yazdırırken
$sonuc[1] ve
$sonuc[2] şeklinde de yazdırabilirdik yani sütunların sıra numarasını alan isimlerinin yerine kullanabilirdik. Son yöntemimizde bu yöntemle benzerlik gösteriyor. Hatta hemen hemen aynı. Şimdi yukarıdaki kodu diğer yöntemle yapalım.
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
$sql="select * from tablo";
$sorgu=mysql_query($sql,$baglanti);
while ($sonuc = mysql_fetch_assoc($sorgu)) {
echo $sonuc["name"];
echo $sonuc["sifre"];
}
?>
Görüldüğü gibi
mysql_fetch_array yerine
mysql_fetch_assoc kullandık mantık ikisi içinde aynı tek fark
mysql_fetch_assoc ile çekilen verileri sütun numaraları vererek yani
$sonuc[1] gibi bir değişken ile belirtemeyiz. Bu işi yapan bir başka komut ise
mysql_fetch_row() komutudur kullanılışı
mysql_fetch_assoc() ve
mysql_fetch_array() ile aynıdır fakat
mysql_fetch_assoc() komutunun aksine sadece çektiğimiz verileri sütun numaralarını vererek görüntüleyebiliriz. Örneğin
$sonuc[1]; şeklinde verileri çekeriz. Son olarak sorgumuz bitirdikten sonra bu sorguları bellekten silmeyi öğreneceğiz. Eğer sorgular bellekte birikirsi bu sunucumuza fazla yüklenmemize neden olur. Buda yapacağınız yeni sorguların yavaşlaması dolayısıyla sitenizin yavaşlamasına neden olur. Bellekte tutulan sorgu sonuçlarını silmek için php de
mysql_free_result() fonksiyonu kullanılır. Örneğin yukarıdaki koddaki sorguyu bellekten silelim.
CODE:
<?
$baglanti=mysql_connect($hostname,$kullaniciadi,$sifre);
$sql="select * from tablo";
$sorgu=mysql_query($sql,$baglanti);
while ($sonuc = mysql_fetch_assoc($sorgu)) {
echo $sonuc["name"];
echo $sonuc["sifre"];
}
mysql_free_result($sorgu);
?>
Görüldüğü gibi
mysql_query() ile çektiğimiz verileri
mysql_free_result() komutu ile silmiş olduk.
Dia
okanatabag@gmail.com
30 Aralik 2005 12:34