Anasayfa / PHP / PHP ve Veritabanı İşlemleri (MySQL ile Kullanım)

PHP ve Veritabanı İşlemleri (MySQL ile Kullanım)

Web geliştirme serüvenimizde HTML ile sayfalar tasarlamayı, PHP değişkenleri ve döngüleriyle bu sayfalara mantık katmayı öğrendik. Ancak günümüzdeki web siteleri sadece statik metinlerden ibaret değildir. Ziyaretçilerin sisteme üye olması, e-ticaret sitelerinde ürünlerin listelenmesi veya bir blog sayfasındaki yorumların saklanması için bilgilerin kalıcı olarak depolanması gerekir.

İşte bu noktada PHP’nin en çok kullanıldığı ve en güçlü olduğu alan devreye girer: Veritabanı (Database) İşlemleri. Bu rehberimizde, dünyanın en popüler ikililerinden biri olan PHP ve MySQL kullanarak veritabanı işlemlerinin (bağlantı kurma, veri ekleme, veri okuma, güncelleme ve silme) nasıl yapıldığını adım adım ve bol örneklerle öğreneceğiz.

Veritabanı ve MySQL Nedir? (Kütüphane Analojisi)

Veritabanını devasa bir kütüphane olarak düşünebilirsiniz. Bu kütüphanede bilgilerin rastgele etrafa saçılmasını engellemek için kitaplıklar (tablolar) bulunur. Elektronik veritabanlarında da bilgiler, satırlar (kayıtlar) ve sütunlar (alanlar) şeklinde düzenlenmiş tablolar halinde saklanır. Örneğin, kütüphane analojisinde her bir kitap bir “kayıt”, kitabın adını taşıyan etiket ise o kaydı diğerlerinden ayıran “Birincil Anahtar”dır (Primary Key).

MySQL, günümüzde web dünyasında en çok tercih edilen ilişkisel veritabanı yönetim sistemlerinden biridir. Ücretsiz, açık kaynaklı olması ve PHP ile kusursuz bir uyum içinde çalışması sayesinde Wikipedia, Facebook ve WordPress gibi internet devleri tarafından bile tercih edilmektedir.

PHP ve MySQL Birlikte Nasıl Çalışır?

PHP ve MySQL’in birlikte çalışma mantığını bir restoran örneğiyle açıklayabiliriz:

  • Siz (Kullanıcı) bir web sayfasına girip kayıt formunu doldurduğunuzda, siparişi garsona (PHP) vermiş olursunuz.
  • PHP bu bilgileri alır ve restoranın mutfağına, yani bilgilerin depolandığı yer olan MySQL’e götürür.
  • MySQL bu veriyi ilgili tabloya kaydeder.
  • Daha sonra profilinizi görüntülemek istediğinizde, PHP tekrar mutfağa (MySQL) gidip “Bu kullanıcının bilgilerini ver” şeklinde bir sorgu atar.
  • MySQL verileri PHP’ye gönderir, PHP de bu verileri işleyerek HTML formatında size sunar.

Tüm bu iletişim SQL (Structured Query Language – Yapılandırılmış Sorgu Dili) adı verilen özel bir dil ile gerçekleştirilir.

1. PHP ile MySQL’e Bağlanmak (MySQLi Kullanımı)

PHP 5 ve sonrasında veritabanı işlemleri için genellikle iki eklenti kullanılır: PDO (farklı veritabanı türlerini destekler) ve MySQLi (sadece MySQL için özel olarak geliştirilmiş ve iyileştirilmiş eklenti). Biz bu rehberde, yeni başlayanlar için anlaşılması daha kolay olan MySQLi (Nesne Yönelimli) eklentisini kullanacağız.

Bir PHP dosyasında veritabanı işlemi yapabilmek için öncelikle veritabanı sunucusuna bağlanmalıyız:

<?php
// Veritabanı bağlantı bilgileri
$sunucu = "localhost"; // Sunucu adresi (genelde localhost)
$kullanici = "root"; // Veritabanı kullanıcı adı
$sifre = "123456"; // Veritabanı şifresi
$veritabani = "okul_veritabani"; // Kullanılacak veritabanı adı

// Bağlantıyı oluştur (Nesne yönelimli MySQLi sınıfı)
$baglanti = new mysqli($sunucu, $kullanici, $sifre, $veritabani);

// Bağlantıda hata olup olmadığını kontrol et
if ($baglanti->connect_error) {
    die("Bağlantı hatası: " . $baglanti->connect_error);
}
echo "Veritabanına başarıyla bağlanıldı!";
?>

Yukarıdaki kodda new mysqli() sınıfını çağırarak bir bağlantı nesnesi ürettik. Eğer şifre veya veritabanı adı yanlışsa $baglanti->connect_error bize hatanın ne olduğunu söyleyecek ve die() fonksiyonu kodun çalışmasını durduracaktır.

2. Veritabanına Yeni Kayıt Ekleme (INSERT)

Bağlantıyı sağladıktan sonra, veritabanındaki “ogrenciler” adlı tabloya yeni bir kişi ekleyelim. Bunun için SQL’in INSERT INTO komutunu kullanacağız.

<?php
// Eklenecek verilerle SQL sorgusunu hazırlıyoruz
$sql = "INSERT INTO ogrenciler (ad, soyad, sinif) VALUES ('Ahmet', 'Yılmaz', '10-A')";

// Sorguyu çalıştırıp sonucu kontrol ediyoruz
if ($baglanti->query($sql) === TRUE) {
    echo "Yeni öğrenci kaydı başarıyla eklendi.";
} else {
    echo "Hata oluştu: " . $baglanti->error;
}
?>

Bu örnekte $baglanti->query($sql) komutu, PHP’nin hazırladığımız metin halindeki SQL sorgusunu MySQL’e gönderip çalıştırmasını sağlar.

3. Veritabanından Veri Okuma (SELECT)

Kayıtları ekledikten sonra, bunları ekranda listelemek web geliştirmenin en temel işlemidir. Tablodan veri çekmek için SQL’in SELECT komutunu kullanırız.

<?php
// Öğrenciler tablosundaki id, ad ve soyad bilgilerini seç
$sql = "SELECT id, ad, soyad FROM ogrenciler";

// Sorguyu çalıştır ve sonucu $result değişkenine ata
$result = $baglanti->query($sql);

// Eğer tabloda 0'dan fazla kayıt (satır) varsa işlemlere başla
if ($result->num_rows > 0) {

    // Her bir satırı ilişkisel dizi (associative array) olarak al ve döngüye sok
    while($row = $result->fetch_assoc()) {
        echo "Öğrenci ID: " . $row["id"] . " - Ad: " . $row["ad"] . " - Soyad: " . $row["soyad"] . "<br>";
    }

} else {
    echo "Tabloda hiç kayıt bulunamadı.";
}
?>

Buradaki mantık çok önemlidir. $result->num_rows komutu, sorgumuz sonucunda kaç satır veri geldiğini kontrol eder. Eğer veri varsa, while döngüsü devreye girer. fetch_assoc() fonksiyonu sayesinde MySQL’den gelen ham veriler, PHP’de kolayca kullanabileceğimiz dizi (array) formatına dönüştürülür ve tüm öğrenciler sırayla ekrana yazdırılır.

4. Veri Güncelleme ve Silme (UPDATE & DELETE)

Bazen mevcut bir kaydı değiştirmek (örneğin kullanıcının şifresini güncellemek) veya tamamen silmek gerekebilir.

Güncelleme (UPDATE) Örneği:

<?php
// ID'si 1 olan öğrencinin sınıfını 11-A olarak değiştir
$sql = "UPDATE ogrenciler SET sinif='11-A' WHERE id=1";

if ($baglanti->query($sql) === TRUE) {
    echo "Kayıt başarıyla güncellendi.";
} else {
    echo "Güncelleme hatası: " . $baglanti->error;
}
?>

Uyarı: UPDATE ve DELETE işlemlerinde WHERE (Koşul) belirtmeyi asla unutmayın. Aksi takdirde tablodaki tüm öğrencilerin sınıfını aynı anda değiştirmiş olursunuz!

Silme (DELETE) Örneği:

<?php
// ID'si 3 olan öğrenciyi tablodan sil
$sql = "DELETE FROM ogrenciler WHERE id=3";

if ($baglanti->query($sql) === TRUE) {
    echo "Kayıt başarıyla silindi.";
}
?>

Güvenlik: Kullanıcıdan Gelen Verilere Asla Güvenmeyin! (SQL Injection)

Bir kayıt formundan gelen (örneğin $_POST ile aldığınız) verileri doğrudan SQL sorgunuzun içine yazmak büyük bir güvenlik zafiyetidir. Kötü niyetli kullanıcılar, form alanlarına özel SQL kodları yazarak veritabanınızı silebilir veya şifreleri çalabilir. Bu duruma SQL Injection (SQL Enjeksiyonu) adı verilir.

Bunu önlemek için MySQLi’nin real_escape_string() metodunu kullanabilir veya daha profesyonel bir yöntem olan Prepared Statements (Hazırlanmış İfadeler) yapısını tercih edebilirsiniz. Hazırlanmış ifadeler kullanıldığında, SQL komutunun iskeleti ile kullanıcının girdiği veri veritabanına ayrı ayrı gönderilir. Bu sayede, kullanıcının girdiği veri hiçbir şekilde çalıştırılabilir bir kod (komut) olarak algılanmaz; sadece saf bir metin olarak kaydedilir, bu da %100’e yakın bir güvenlik ve performans artışı sağlar.

Sonuç

Bu rehberde, PHP kullanarak veritabanı işlemlerinin (CRUD – Create, Read, Update, Delete) MySQL ile nasıl yapıldığını inceledik. Modern web projelerinin bel kemiği olan bu işlemleri mantığıyla kavramak, dinamik web uygulamaları (e-ticaret siteleri, forumlar, CMS sistemleri) geliştirmek için en kritik adımdır. Kodlarınızı yazarken, kullanıcıdan gelen verileri her zaman filtrelemeyi (sanitize) ve bağlantılarınızı işlemler bittikten sonra $baglanti->close(); komutu ile kapatmayı alışkanlık haline getirmelisiniz. İyi kodlamalar!

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir