Tweet

PHP | Veritabanı İşlemleri

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

İlgili Olabilecek Makaleler


Yorumlar (6)





ryilmazz
2 Ekim 2008 23:40
çok teşekkür ederim,
özellikle $mysql_result()'ın çok boyutlu dizi şeklinde sonuç verdiğini öğrenmek benim inanılmaz çok işime yaradı.


tync
15 Ekim 2008 15:02
süpeR...ELLeRinize sağLık...


EfeM
23 Eylul 2009 12:01
Ben makalenizi yeni okudum. Anlatım gayet sade ve net. Teşekkürler..


crealwan
2 Mart 2010 22:04
Saolasın epey uğraştığım döngü problemini bu yazıda çözdüm eline emeğine sağlık


teo84
13 Mart 2010 01:24
hocam resim nasıl ekleyip safyada gosterebiliriz onun kondunuda acıklarmısınız


leo34
25 Mart 2010 14:15
arkadaslar sıze bısı sorcam bu phpde sadece mysql werı tabanı baglantısımı oluyor yoksa access yada ne bılım oracle ıle de baglantı kurulabılıyormu yardımlarınızz ıcın sımdıden cok tesekkurlerr arkadaslar ...!

Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg