PHP: Temel MySQL Veritabanı İşlemleri
Veritabanlarının kullanım amacı, veri saklamak ve istenildiğinde bunlar üzerinde işlem yapmaktır. Bu işlemler ayrıntıya inildikçe çok fazla çeşitlilik gösterse de, temel olarak verilerimiz üzerinde gerçekleştirdiğimiz ortak işlemleri şöyle sıralayabiliriz;
- Kaydetme
- Arama
- Güncelleme
- Silme
Bu tür işlemlerin kullanılan veritabanı ya da programlama dilinden bağımsız olarak standart yöntemlerle gerçekleştirilebilmeleri amacıyla SQL (Structured Query Language) adlı dil geliştirilmiştir. Diğer bir deyişle SQL dilinin amacı, bütün veritabanlarının bütün programlama dilleri ile aynı dili konuşmalarını sağlamaktır.
Bu bölümde gerçekleştireceğimiz PHP ve MySQL arasındaki iletişimlerde de SQL cümlelerini kullanacağız.
Temel Veritabanı İşlemleri – Insert (Yeni Kayıt Ekleme)
Veritabanının bir tablosuna veri eklemek için kullandığımız SQL cümlesinin genel yapısı aşağıdaki gibidir:
INSERT INTO <tablo_adi> (<alan_adlari>) VALUES (<değerler>)
Alan adları aynen veritabanında tanımlandığı biçimleri ile yazılmalıdır ve birbirlerinden virgül işreti ile ayrılırlar.
Değerler ise karşılık gelen alan adları ile aynı sırada yazılırlar ve yine birbirlerinden virgül işreti ile ayrılırlar.
Değerler yazılırken dikkat edilmesi gereken diğer bir husus da, veritabanında yerleştikleri alanın veri türü ile uyuşmalarıdır.
İşleyeceğimiz örnek ‘ogrenci’ adlı veritabanımızın tablo adı ‘anatablo’ ve yapısı aşağıdaki gibidir.
siraNo | ad | soyad | eposta |
---|---|---|---|
1 | … | … | … |
2 | … | … | … |
3 | … | … | … |
Örnek tabloya göre php üzerinden mysql kayıt girdisi yapalım.
1 2 3 4 | <?php $con = mysqli_connect("localhost","root","",ogrenci); mysqli_query($con,"INSERT INTO anatablo (ad , soyad , eposta) VALUES ('Kamil' , 'ERSÖNMEZ' , '[email protected]')"); ?> |
Örnek Senaryo: Öğrenciye ait numara, ad, soyad, vize ve final notları öğretmen tarafından girilecek.
Geçme notu, vize notunun %40’ı ve final notunun %60’ı toplanarak elde edilecek. Harf notu ise referans değer tablosuna göre yine program tarafından otomatik atanacak.
Başarı durumu, geçme notuna göre hesaplanacak. Eğer geçme notu 50 ve üzerinde ise geçti, aksi halde kaldı bilgisi otomatik olarak kaydedilecek.
Sonuç olarak, öğretmen tarafından girilen beş değer, programımız tarafından hesaplanan üç değerle birlikte veritabanımızın tablosuna bir kayıt girdisi olarak eklenecek.
Tablo(ogrenci2) Yapısı:
numara | ad | soyad | vize | final | gecme | harf | basari |
---|---|---|---|---|---|---|---|
1 | … | … | … | … | … | … | … |
2 | … | … | … | … | … | … | … |
Yukarıdaki Senaryoya göre öğrenci ekleme sayfası şu şekilde olmalıdır.
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | <form action="" method="post"> <table width="503" border="1"> <tr> <td width="169" bgcolor="#FFFFCC">Numara :</td> <td width="318" bgcolor="#33FFFF"><input size="10" type="text" name="numara"></td></tr> <tr> <td bgcolor="#FFFFCC">Ad :</td> <td bgcolor="#33FFFF"><input size="20" type="text" name="ad"></td> </tr> <tr> <td bgcolor="#FFFFCC">Soyad :</td> <td bgcolor="#33FFFF"><input size="20" type="text" name="soyad"></td> </tr> <tr> <td bgcolor="#FFFFCC">Vize :</td> <td bgcolor="#33FFFF"><input size="3" type="text" name="vize"></td> </tr> <tr> <td bgcolor="#FFFFCC">Final :</td> <td bgcolor="#33FFFF"><input size="3" type="text" name="final"></td> </tr> <tr> <td colspan="2" bgcolor="#FFCC99"><input name="dugme" type="submit" value="Hesapla & Kaydet"></td> </tr> </table> </form> <?php function sqlConnect(){ $con = mysqli_connect("localhost","root" ,"","ogrenci2"); $sncDeger = $con; return $sncDeger; } function gecmeNotuHesapla($v, $f){ return (2*$v+3*$f)/5; } function harfNotuHesapla($Not){ if($Not<=39) {$harf = "FF"; $basari=0;} elseif ($Not<=49){$harf = "DC"; $basari=0;} elseif ($Not<=59){$harf = "CC"; $basari=1;} elseif ($Not<=69){$harf = "CB"; $basari=1;} elseif ($Not<=79){$harf = "BB"; $basari=1;} elseif ($Not<=89){$harf = "BA"; $basari=1;} elseif ($Not<=100){$harf = "AA"; $basari=1;} return $harf; } function basariDurumu($Not){ if ($Not<=49) {$basari=0;} else {$basari=1;} return $basari; } if(isset($_POST["dugme"])){ if (sqlConnect()){ echo "<p>Bağlantı başarılı..."; $numara = $_POST['numara']; $ad = $_POST['ad']; $soyad = $_POST['soyad']; $vize = (int)$_POST['vize']; $final = (int)$_POST['final']; $gecme = number_format(gecmeNotuHesapla($vize, $final),2); $harf = harfNotuHesapla($gecme); if(basariDurumu($gecme)==1){$basari_durumu="Geçti";} else{$basari_durumu="Kaldi";} $sonuc = mysqli_query($con, "INSERT INTO anatablo (numara, ad , soyad , vize, final, gecme, harf, basari) VALUES ('$numara', '$ad' , '$soyad' , '$vize' , '$final' , '$gecme' , '$harf' , '$basari_durumu')"); if($sonuc){ echo "<p>Geçme Notu.......", $gecme; echo "<p>Harf Notu........", $harf; echo "<p>Başarı Durumu....", $basari_durumu; echo "<p>Bilgiler veritabanına eklenmiştir..."; }else{ echo "Bilgiler eklenemedi...";} }else{ echo "Bağlantıda sorun var..."; } } ?> |
Temel Veritabanı İşlemleri – Select (Kayıtlı Verileri Okuma)
Veritabanının bir tablosunda yer alan verileri okumak için kullandığımız SQL cümlesinin genel yapısı aşağıdaki gibidir:
SELECT <alan_adlari> FROM <tablo_adi>
Alan adları aynen veritabanında tanımlandığı biçimde büyük küçük harfe duyarlı yazılmalıdır ve birbirlerinden virgül işreti ile ayrılırlar. Eğer veritabanından bütün alanların içerdiği değerleri çekmek istiyorsak alan adları yerine ALL ya da * ifadesi kullanılır.
Kayıt Ekleme örneğimizde kullandığımız “ogrenci2” veritabanındaki kayıtları okuyarak ekranda listeleyecek örneğimiz aşağıdaki gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php function sqlConnect(){ $con = mysqli_connect("localhost","root" , "","ogrenci2"); $sncDeger = $con; return $sncDeger; } if (sqlConnect()){ $sonuclar = mysqli_query($con,"SELECT numara,ad,soyad FROM anatablo"); while ($row=mysqli_fetch_array($sonuclar)){ echo $row['numara']," ",$row['ad']," ", $row['soyad'],"<br>"; } } ?> |
Burada anatablo’dan her bir öğrenciye ait numara, ad ve soyad bilgileri çekilmiştir. Sorgulama sonucunda elde edilen kayıt kümesi (record set), $sonuçlar adlı bir değişkende saklanmıştır.
While döngüsü bu veri kümesini tarayarak her bir kaydın ekrana yazılmasını sağlamaktadır.
Temel Veritabanı İşlemleri – Where (Kayıt Süzme)
Bu başlık altında SELECT cümlesinin koşullu kullanımını göreceğiz.
Bu kullanımda, belirli bir koşulu sağlayan verilerin süzülmesi sağlanmaktadır. Genel yapısı aşağıdaki gibidir:
SELECT <alan_adlari> FROM <tablo_adi> WHERE <Koşul>
Koşul, alanlar üzerine tanımlı Boolean bir ifade şeklinde belirlenir.
Yine önceki örneğimizde kullandığımız “ogrenci2” veritabanını kullanan bir örnek geliştirelim. Ancak bu defa, çektiğimiz verileri kullanıcının tercihine göre geçenler ya da kalanlar biçiminde süzecek bir tasarım yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php function sqlConnect(){ $snc = mysqli_connect("localhost","root" ,"","ogrenci2"); $sncDeger = $snc; return $sncDeger; } if (sqlConnect()){ $basari_durumu = $_POST['filtre']; //Burada Gelen POST verisine göre sorgumuz şekil alacak. $sonuclar = mysqli_query($con,"SELECT numara,ad,soyad FROM anatablo WHERE basari='$basari_durumu'"); while ($row=mysqli_fetch_array($sonuclar)){ echo $row['numara']," ",$row['ad']," ", $row['soyad'],"<br>"; } } ?> |
SELECT cümlesinin bir diğer kullanım da, çekilen kayıt kümesini istenilen alan ya da alanlara göre sıralı olarak oluşturur. Genel yapısı aşağıdaki gibidir:
SELECT <alan_adlari> FROM <tablo_adi> ORDER BY <alanlar> ASC|DSC
Artan sıralama isteniyorsa ASC, azalan sıralama için ise DSC ifadesi kullanılır.
Verileri öğrenci adına göre artan sırada listeleyecek kod satırları:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php function sqlConnect(){ $snc = mysqli_connect("localhost","root" , "","ogrenci2"); $sncDeger = $snc; return $sncDeger; } if (sqlConnect()){ $sonuclar = mysqli_query($con, "SELECT numara,ad,soyad FROM anatablo ORDER BY ad ASC"); while ($row=mysqli_fetch_array($sonuclar)){ echo $row['numara'] " - " . $row['ad'] . " " . $row['soyad'] . "<br>"; } } ?> |
Temel Veritabanı İşlemleri – Update (Kayıt Güncelleme)
Veri güncellemek için kullandığımız SQL cümlesinin genel yapısı aşağıdaki gibidir:
UPDATE <tablo_adi> SET <alan1>=<değer>, <alan2>=<değer> WHERE <koşul>
Koşul cümlemizi sağlayan kayıt kümesindeki alanlar üzerinde güncelleme işlemi gerçekleştirilecektir.
1 2 3 4 5 6 7 8 9 | <?php $con=mysqli_connect("localhost","root",""); if (!$con){ die('Bağlanılamadı: ' . mysqli_error($con)); } mysqli_select_db($con,"veritabanim"); mysqli_query($con, "UPDATE Kisiler SET Yas = '36' WHERE Adi = 'Kamil' AND Soyadi = 'ERSÖNMEZ'"); mysqli_close($con); ?> |
Bu örnekte, “veritabanim” adlı veritabanının “Kisiler” tablosunda yer alan Kamil ERSÖNMEZ adlı yaş bilgisi 36 olarak güncellenmiştir.
Temel Veritabanı İşlemleri – Delete (Kayıt Silme)
Veri silmek için kullandığımız SQL cümlesinin genel yapısı aşağıdaki gibidir:
DELETE FROM <tablo_adi> WHERE <koşul>
Koşul cümlemizi sağlayan kayıt kümesindeki alanlar üzerinde silme işlemi gerçekleştirilecektir.
1 2 3 4 5 6 7 8 9 | <?php $con = mysql_connect("localhost","root",""); if(!$con){ die('Bağlanılamadı: ' . mysqli_error($con)); } mysqli_select_db($con,"veritabanim"); mysqli_query($con,"DELETE FROM Kisiler WHERE Soyadi = 'ERSÖNMEZ'"); mysqli_close($con); ?> |
Bu örnekte, “veritabanim” adlı veritabanının “Kisiler” tablosunda yer alan ve soyadı ERSÖNMEZ olan tüm kayıtlar silinecektir.
- 12 Mart 2022
Diğer Yazılarımız
Tüm Yazılarımız
Soru işareti kalmasın
Bu yazı hakkında aklınıza takılanlar, bir fikriniz belkide şikayetiniz vardır. Yada yazımızda hatalar olduğunu düşünüyor olabilirsiniz. Peki neden bize ulaşmayı düşünmeyesiniz ki?
Hizmetlerimiz
Binlerce müşterimizin yararlandığı 100'e yakın hizmetlerimizden sizlerde yararlanabilirsiniz. Onlarca ücretsiz web hizmeti ve profesyonel destekle sizleri daima daha ileriye taşımayı hedefliyoruz.
Tüm Yenilik ve Kampanyalardan Haberdar Ol
Son Yazılar
- CSS Grid Kullanımı Başlangıç Rehberi 1 Ocak 2025
- C# While Döngüsü Kullanımı 1 Ocak 2025
- C# ile Dosya Okuma ve Yazma İşlemleri 29 Aralık 2024