MENÜ

Php Dersleri 8 : Mysql Veritabanı

919 defa okundu Yorumlanmadı kategorisinde, tarihinde yayınlandı
Php Dersleri 8 : Mysql Veritabanı

Adını sıklıkla zikrettiğimiz veya duyduğumuz ve olmazsa olmazımız sql veritabanlarının php ile en uyumlusu diyebiliriz. Geliştirilmiş veya halen geliştirilmekte olan mysql ‘e oranla daha hızlı farklı sql formatları var ancak en stabili ve yaygını olması nedeni ile biz projelerimizde mysql kullanmayı tercih ediyoruz. Bu konuda size bir mysql veritabanını nasıl oluşturacağınızı anlatmayacağım bunun için hosting firmanızdan destek alabilirsiniz veya local sistemlerde oldukça kolay oluşturabilirsiniz. Şuandan itibaren bir sql veritabanınızın varolduğunu düşünerek işlem yapacağım.

Öncelikle bir sql bağlantısını nasıl oluşturacağımızı görelim.

1
2
3
4
5
6
7
$dbhost = "localhost"; //sql sunucumuzun adresi genellikle bağlantı aynı sunucudan yapıldığı için localhost kullanılır
$dbveritabani = "veritabanıadı"; //veritabanı adımız
$dbkullanici = "veritabanıkullanıcıadı"; //veritabanı kullanıcı adı
$dbsifre = "veritabanıkullanıcışifresi"; //veritabanı kullanıcı şifresi
$baglan = mysql_connect($dbhost,$dbkullanici,$dbsifre); //bağlan değişkenine kullanıcı adı ve şifresi ile bir bağlantı atıyoruz
if(!$baglan) die ("Mysql Sunucu Bağlantısı Kurulamıyor"); //eğer baglan değişkenine atadığımız bağlantıda sorun varsa hata veriyor
mysql_select_db($dbveritabani,$baglan) or die ("Veritabanına Bağlanamadı"); //işlem yapacağımız veritabanını seçiyoruz eğer bu veritabanı yoksa hata yazdırıyoruz

Bağlantı işlemi oldukça basit öncelikle mysql_connect komutu ile veritabanı sunucusuna kullanıcı adımız ve şifremiz ile erişim yapıyor, sonrasında mysql_select_db komutu ile işlem yapacağımız veritabanımızı seçiyoruz. Bu standart olarak yapacağımız ilk işlem. Şimdi phpmyadmin aracılığı ile aşağıdaki sql kodunu işleyerek göstereceğimiz örnekleri sizde deneyebilirsiniz.

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS `kullanici` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `adi` VARCHAR(100) NOT NULL,
  `soyadi` VARCHAR(100) NOT NULL,
  `dtar` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
 
INSERT INTO `kullanici` (`id`, `adi`, `soyadi`, `dtar`) VALUES
(1, 'ahmet', 'yesertener', '1987');

veya bu işlemide php üzerinden aşağıdaki kod ile yaptırabiliriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$dbhost = "localhost";
$dbveritabani = "veritabanı";
$dbkullanici = "kullanıcı";
$dbsifre = "şifre";
$baglan = mysql_connect($dbhost,$dbkullanici,$dbsifre);
if(!$baglan) die ("Mysql Sunucu Bağlantısı Kurulamıyor");
mysql_select_db($dbveritabani,$baglan) or die ("Veritabanına Bağlanamadı");
 
$a = mysql_query("CREATE TABLE IF NOT EXISTS `kullanici` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `adi` VARCHAR(100) NOT NULL,
  `soyadi` VARCHAR(100) NOT NULL,
  `dtar` VARCHAR(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;");
 
if($a) echo 'Tablolar Oluşturuldu.'; else echo 'Tablolar Oluşturulurken Hata oluştu.';

Bu örnekte yeni bir komut ile karşılaşıyoruz. mysql_query kodu yapacağımız tüm sql işlemleri için dönüştürücü niteliğindedir. bu kod içerisine sql komutlarını girebiliriz.

Mysql Veri Ekleme

mysql_query komutundan daha önce bahsetmiştik, veri eklemek için query olarak sql komutlarını bu komut aracılığı ile veritabanımıza göndereceğiz. Veri eklemek için INSERT komutunu ve tablo seçimi için INTO seçicisini kullanıyoruz ve verileri VALUES ile bildiriyoruz. Daha önce verdiğimiz örnek için bir satır veri girişi örneği yapalım.

1
2
3
4
$b = mysql_query("INSERT INTO `kullanici` (`id`, `adi`, `soyadi`, `dtar`) VALUES
(1, 'ahmet', 'yesertener', '1987');");
 
if($b) echo 'Örnek Veri Girildi.'; else echo 'Örnek Veri Girilirken Hata oluştu.';

Bu örnekte id değerini belirttiğimiz için sadece 1 defa işlem yapabiliriz. id alanını tablomuzu oluştururken PRIMARY KEY olarak tanımlamış olmamız onu direkt olarak benzersiz olmaya zorlayacak ve tekrar bu kodu işlemek istediğimizde hata vermesine neden olacaktır. Aynı alanı AUTO_INCREMENT olarak tanımlamış olmamız yani otomatik olarak numara belirleyecek olması bu alana veri girmemize gerek bırakmıyor yani aşağıdaki kullanım daha doğru olacaktır.

1
2
3
4
$b = mysql_query("INSERT INTO `kullanici` (`adi`, `soyadi`, `dtar`) VALUES
('ahmet', 'yesertener', '1987');");
 
if($b) echo 'Örnek Veri Girildi.'; else echo 'Örnek Veri Girilirken Hata oluştu.';

Php üzerinde işlem yapacağımız için bu tabloların içeriğini manuel olarak değil değişkenler aracılığı ile gireceğiz yani aşağıdaki şekilde bir kullanım çok daha sağlıklı olabilir.

1
2
3
4
5
6
7
$ad='Ahmet';
$soyad='Yeşertener';
$dtar=1987;
$b = mysql_query("INSERT INTO `kullanici` (`adi`, `soyadi`, `dtar`) VALUES
('$ad', '$soyad', '$dtar');");
 
if($b) echo 'Örnek Veri Girildi.'; else echo 'Örnek Veri Girilirken Hata oluştu.';

Not: tablo seçiminden sonra ekleme yapılacak alanları seçmez isek VALUES değerlerini tablo standardındaki sıra ile girmemiz gerekmektedir. Aşağıdaki örnek daha net olarak anlamnıza yardımcı olacaktır.

1
mysql_query("INSERT INTO `kullanici` VALUES ('1','Ahmet', 'Yeşertener', '1987');");

veya otomatik bir id değeri için aşağıdaki kodu kullanabilirsiniz.

1
mysql_query("INSERT INTO `kullanici` VALUES ('','Ahmet', 'Yeşertener', '1987');");

Veri Okuma ve Listeleme

Girdiğimiz verileri bi yerlerde göstermek veya listelemek sql işlemlerinde birincil istiyaçtır. Daha öncede belirttiğimiz gibi mysql_query tüm mysql işlemlerinde sql ile php köprüsünü oluşturacak komutumuzdur. Sql’de bir tabloyu seçmek SELECT komutunu kullanıyoruz. Örnek bir listeleme yapalım.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$tumu = mysql_query("SELECT * FROM kullanici");
 
if(mysql_num_rows($tumu)!=0)
{
	while($oku = mysql_fetch_object($tumu))
	{
		echo 'ID: '.$oku->id.'
';
		echo 'Adı: '.$oku->adi.'
';
		echo 'Soyadı: '.$oku->soyadi.'
';
		echo 'Doğum Tarihi: '.$oku->dtar.'
';			
		echo '
 
<hr />
 
'; } }else{ echo "Hiç kayıt yok!"; }

Bu örneğimizde SELECT ‘ten sonra * (yıldız) simgesi kullanılmıştır bu tüm alanların çekilmesi için kullanılır ancak eğer siz sadece belirli bir alanı çekecekseniz aşağıdaki şekilde kullanabilirsiniz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$tumu = mysql_query("SELECT adi,soyadi FROM kullanici");
 
if(mysql_num_rows($tumu)!=0)
{
	while($oku = mysql_fetch_object($tumu))
	{
		echo 'ID: '.$oku-&gt;id.'
';
		echo 'Adı: '.$oku-&gt;adi.'
';
		echo 'Soyadı: '.$oku-&gt;soyadi.'
';
		echo 'Doğum Tarihi: '.$oku-&gt;dtar.'
';			
		echo '
 
<hr />
 
'; } }else{ echo "Hiç kayıt yok!"; }

Bu örneğimizi çalıştırdığınızda id ve doğum tarihleri değerlerini çekmediğini göreceksiniz. Peki ama sadece belli özellikte olan verileri listelemek istiyorsak ne yapacağız? İşte tam burada WHERE komutu devreye giriyor ve istediğimiz özellikteki alanları seçmemize olanak sağlıyor birden fazla alan seçimi için aralarında AND (ve) komutunu kullanmamız gerekecektir. Yine aynı alanda OR (veya) seçimi yaptırabilir.

1
mysql_query("SELECT * FROM kullanici WHERE dtar='1987'");

Bu kullanımda dtar değeri 1987 olan tüm kayıtları çekeceğiz çekilecek değerlerinin alanını biraz daha daraltmak için şu örneğe bir göz atalım

1
mysql_query("SELECT * FROM kullanici WHERE dtar='1987' AND adi='ahmet'");

Burada ise doğum tarihi 1987 olan ve adı ahmet olan kayıtları listeliyoruz. Peki aynı alan için birden fazla değeri listelemek istiyorsak veya birden fazla sorgudan sadece birisinin gerçekleştiği durumlara ihityacımız varsa ne yapacağız. Size OR kullanımından bahsetmiştim, şu örneği inceleyelim.

1
mysql_query("SELECT * FROM kullanici WHERE dtar='1987' OR dtar='1984'");

Burada doğum tarihi 1987 ve 1984 olan kullanıcıları listeledik ancak OR mantıksal sorgusu genellikle aynı alanlardaki farklı değerler için değil farklı alanlardaki oluşabilecek sorgular için kullanılır aynı alan için birden fazla değeri çektirtmek istiyorsak IN mantıksal sorgusunu kullanabiliriz. Bunun içinde bir örnek kullanalım.

1
mysql_query("SELECT * FROM kullanici WHERE dtar IN('1985','1984')");

Bu işlem ile aynı alandaki birden fazla değerli veriyi listeleyebiliriz. Peki ama listeleme işlemlerini belli bir düzene göre yapacaksak veya belli bir alana göre yapacaksak ne yapmalıyız? ORDER BY komutu ile belli bir alanın değerine göre sıralayabiliriz. Küçükten büyüğe sıralamak için ASC büyükten küçüğe sıralamak için DESC komutunu kullanıyoruz. Örnek olarak:

1
mysql_query("SELECT * FROM kullanici ORDER BY dtar ASC");

Tüm kullanıcılarımızı doğum tarihine göre doğum yılı küçük olandan büyük olana doğru sıraladık yani mantıksal olarak yaşı büyük olandan, küçük olana doğru sıralamış olduk.

Sadece tek bir satırı okuyacaksak mantık değişmemekle birlikte zorunluluğumuz benzersiz bir alana göre çekim yaptırmaktadır.

1
2
3
$tumu = mysql_query("SELECT * FROM kullanici WHERE id='5'");
$oku = mysql_fetch_object($tumu);
echo $oku-&gt;adi;

Bu örnekte id değeri 5 olan satırı çektirmiş olduk query kodları aynı şekilde bu sorgudada geçerlidir. Biz şuana kadar mysql_fetch_object kodu ile çekilen satırları nesnelere aktardık ancak bir yöntemimiz daha var onda ise mysql_fetch_array komutu ile çekilen satırları dizilere aktarabilirsiniz. Ancak bu sefer nesne (sınıf/class) içerisindeki değişkeni çağırır gibi değil dizi içerisindeki veriyi çağırır gibi çağırmamız gerekecektir. Son örneğimizi birde bu şekilde çağırırsak daha net anlaşılacaktır. (Listeleme işlemlerindede aynı şekilde kullanabilirsiniz)

1
2
3
$tumu = mysql_query("SELECT * FROM kullanici WHERE id='5'");
$oku = mysql_fetch_array($tumu);
echo $oku['adi'];

Veri Silme

Veri silme için ekstra bir bilgiye gerek sanırım yok, okuma ve listeleme için kullandığımız komutları birebir geçerlidir SELECT * FROM yerine sadece DELETE FROM komutunu kullanmamız gerekiyor. Yani bir satırı silmek için aşağıdaki örnek bize yeterli olacaktır.

1
mysql_query("DELETE FROM kullanici WHERE id='5'");

Bu alanda listeleme komutları kullanamıyorsunuz DELETE FROM tablo adı yazdıktan sonra silinecek satırın yerini yine WHERE ile seçiyoruz. WHERE komutu için kullanılabilecek standart parametreleri listeleme konusunda sizinle paylaşmıştık.

Veri Değiştirme

Aynı şekilde uzun uzun bunuda anlatmayacağım. Mantığını kavramanız yeterlidir. UPDATE komutu ile seçtiğimiz alanın belirttiğimiz değerini veya tüm değerlerini güncelliyoruz. Hemen bir örnek oluşturalım.

1
mysql_query("UPDATE kullanici SET adi='Deneme' WHERE id='6'");

Birden fazla alanı aynı anda değiştireceksek

1
mysql_query("UPDATE kullanici SET adi='Deneme', soyadi='Yok' WHERE id='6'");

Bu komutta yine WHERE ile düzenlenecek satırı seçiyoruz, UPDATE e özel olan komut ise SET dir yani değiştirilecek alanları ve yeni değerlerini bildirmemize alanak sağlayan komut budur.

Şimdilik bu dersimizinde sonuna gelmiş bulunuyoruz, yeni dersler ve örneklerde tekrar görüşmek üzere, hoşçakalın..

Ahmet Yeşertener

//Ek Döküman//

Sizin için oluşturduğum örnek uygulama işinize yarayabilir 😉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!--?php $dbhost = "localhost"; $dbveritabani = "***"; $dbkullanici = "***"; $dbsifre = "***"; $baglan = mysql_connect($dbhost,$dbkullanici,$dbsifre); if(!$baglan) die ("Mysql Sunucu Bağlantısı Kurulamıyor"); mysql_select_db($dbveritabani,$baglan) or die ("Veritabanına Bağlanamadı"); mysql_query("CREATE TABLE IF NOT EXISTS `kullanici` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `adi` VARCHAR(100) NOT NULL, `soyadi` VARCHAR(100) NOT NULL, `dtar` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;"); if($_POST['ekle']) { if(!$_POST['adi']) { $uyari = 'Adını Girmediniz'; } elseif(!$_POST['soyadi']) { $uyari = 'Soyadını Girmediniz'; } elseif(!$_POST['dtar']) { $uyari = 'Doğum Tarihini Girmediniz'; } else { $adi = $_POST['adi']; $soyadi = $_POST['soyadi']; $dtar = $_POST['dtar']; $ekle = mysql_query("INSERT INTO kullanici VALUES('', '$adi','$soyadi','$dtar')"); if($ekle) $uyari = 'Kayıt Eklendi'; else $uyari = 'Kayıt Eklenirken Hata Oluştu'; } } if($_POST['duz']) { if(!$_POST['adi']) { $uyari = 'Adını Girmediniz'; } elseif(!$_POST['soyadi']) { $uyari = 'Soyadını Girmediniz'; } elseif(!$_POST['dtar']) { $uyari = 'Doğum Tarihini Girmediniz'; } else { $adi = $_POST['adi']; $soyadi = $_POST['soyadi']; $dtar = $_POST['dtar']; $id = $_POST['id']; $ekle = mysql_query("UPDATE kullanici SET adi='$adi', soyadi='$soyadi', dtar='$dtar' WHERE id='$id'"); if($ekle) $uyari = 'Düzenleme Tamamlandı'; else $uyari = 'Kayıt Düzenlenirken Hata Oluştu'; } } if($_POST['sil']) { $check = $_POST['sec']; foreach($check as $value){ mysql_query("DELETE FROM kullanici WHERE id='$value'"); } $uyari = 'Seçilenler Silindi'; } ?-->
 
 
	Yesertener.Com Mysql Örneği
 
<!--?php if($_GET['duzenle']) { $id=$_GET['duzenle']; $tumu = mysql_query("SELECT * FROM kullanici WHERE id='$id'"); $oku = mysql_fetch_object($tumu); ?-->
<div class="ekle">
<div class="label">Düzenle</div>
&nbsp;
 
<form action="&lt;?php echo $_SERVER[">" method="post"&gt; <input name="id" type="hidden" value="&lt;?php echo $oku-&gt;id; ?&gt;" /> <input name="adi" type="text" value="&lt;?php echo $oku-&gt;adi; ?&gt;" />
<input name="soyadi" type="text" value="&lt;?php echo $oku-&gt;soyadi; ?&gt;" />
<input name="dtar" type="text" value="&lt;?php echo $oku-&gt;dtar; ?&gt;" />
<input name="duz" type="submit" value="Değiştir" /></form></div>
<!--?php } else { ?-->&nbsp;
 
<!--?php if($uyari) echo '&lt;br ?-->&nbsp;
<div class="uyari">'.$uyari.'</div>
'; ?&gt;
<div class="ekle">
<div class="label">Yeni Kayıt Ekle</div>
&nbsp;
 
<form action="" method="post"><input name="adi" type="text" placeholder="Adı" />
<input name="soyadi" type="text" placeholder="Soyadı" />
<input name="dtar" type="text" placeholder="Doğum Tarihi" />
<input name="ekle" type="submit" value="Ekle" /></form></div>
<!--?php $tumu = mysql_query("SELECT * FROM kullanici ORDER BY id ASC"); if(mysql_num_rows($tumu)!=0) { ?-->
 
<form action="" method="post">
<div class="listele"><!--?php while($oku = mysql_fetch_object($tumu)) { ?-->
<div class="satir">
<div class="sec"><input name="sec[]" type="checkbox" value="&lt;?php echo $oku-&gt;id; ?&gt;" /></div>
&nbsp;
<div class="adi"></div>
&nbsp;
<div class="soyadi"></div>
&nbsp;
<div class="dtar"></div>
</div>
&nbsp;
 
</div>
&nbsp;
<div class="sil"><input name="sil" type="submit" value="Seçilenleri Sil" /></div>
</form>
Yorum Yaz