PHP ile dinamik web siteleri geliştirirken veritabanı kullanımı kaçınılmazdır. PHP, MySQL gibi popüler veritabanı sistemleriyle kolayca entegre olabilir ve verileri ekleme, okuma, güncelleme ve silme işlemlerini gerçekleştirebilir. Bu rehberde, PHP ile MySQL veritabanı bağlantısı kurmayı ve temel CRUD işlemlerini detaylı şekilde öğreneceğiz.
1. PHP ile MySQL Veritabanı Bağlantısı
Veritabanına bağlanmak için MySQLi veya PDO (PHP Data Objects) kullanılabilir. PDO, daha esnek ve güvenli olduğu için önerilir.
a) MySQLi ile Bağlantı
<?php
$host = "localhost"; // Sunucu adı
$kullanici = "root"; // Veritabanı kullanıcı adı
$sifre = ""; // Varsayılan şifre genellikle boştur
$veritabani = "test_db"; // Kullanılacak veritabanı adı
// MySQL bağlantısını oluştur
$baglanti = new mysqli($host, $kullanici, $sifre, $veritabani);
// Bağlantı hatası kontrolü
if ($baglanti->connect_error) {
die("Bağlantı başarısız: " . $baglanti->connect_error);
}
echo "Bağlantı başarılı!";
?>
Eğer bağlantıda bir hata oluşursa, connect_error ile hatayı kontrol edebiliriz.
2. PHP ile MySQL Veri Ekleme (INSERT)
PHP ile veritabanına veri eklemek için INSERT INTO sorgusu kullanılır.
a) MySQLi ile Veri Ekleme
<?php
$ad = "Ali";
$soyad = "Yılmaz";
$email = "[email protected]";
// SQL sorgusu
$sql = "INSERT INTO kullanicilar (ad, soyad, email) VALUES ('$ad', '$soyad', '$email')";
// Sorguyu çalıştır
if ($baglanti->query($sql) === TRUE) {
echo "Yeni kayıt başarıyla eklendi!";
} else {
echo "Hata: " . $sql . "<br>" . $baglanti->error;
}
?>
b) PDO ile Güvenli Veri Ekleme (Prepared Statements)
SQL enjeksiyonuna karşı güvenli bir yöntem kullanmak için PDO ve prepared statements tercih edilmelidir.
<?php
try {
$baglanti = new PDO("mysql:host=localhost;dbname=test_db", "root", "");
$baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO kullanicilar (ad, soyad, email) VALUES (:ad, :soyad, :email)";
$sorgu = $baglanti->prepare($sql);
$sorgu->execute([
':ad' => 'Ali',
':soyad' => 'Yılmaz',
':email' => '[email protected]'
]);
echo "Kayıt başarıyla eklendi!";
} catch (PDOException $e) {
echo "Hata: " . $e->getMessage();
}
?>
3. PHP ile MySQL Veri Okuma (SELECT)
Veritabanından veri çekmek için SELECT sorgusu kullanılır.
a) MySQLi ile Veri Çekme
<?php
$sql = "SELECT * FROM kullanicilar";
$sonuc = $baglanti->query($sql);
if ($sonuc->num_rows > 0) {
while ($satir = $sonuc->fetch_assoc()) {
echo "ID: " . $satir["id"] . " - Ad: " . $satir["ad"] . " " . $satir["soyad"] . " - Email: " . $satir["email"] . "<br>";
}
} else {
echo "Kayıt bulunamadı.";
}
?>
b) PDO ile Veri Çekme
<?php
$sql = "SELECT * FROM kullanicilar";
$sorgu = $baglanti->query($sql);
$kullanicilar = $sorgu->fetchAll(PDO::FETCH_ASSOC);
foreach ($kullanicilar as $kullanici) {
echo "ID: " . $kullanici["id"] . " - Ad: " . $kullanici["ad"] . " " . $kullanici["soyad"] . " - Email: " . $kullanici["email"] . "<br>";
}
?>
4. PHP ile MySQL Veri Güncelleme (UPDATE)
Bir kaydı güncellemek için UPDATE sorgusu kullanılır.
a) MySQLi ile Güncelleme
<?php
$sql = "UPDATE kullanicilar SET email='[email protected]' WHERE id=1";
if ($baglanti->query($sql) === TRUE) {
echo "Kayıt başarıyla güncellendi!";
} else {
echo "Hata: " . $baglanti->error;
}
?>
b) PDO ile Güvenli Güncelleme
<?php
$sql = "UPDATE kullanicilar SET email=:email WHERE id=:id";
$sorgu = $baglanti->prepare($sql);
$sorgu->execute([
':email' => '[email protected]',
':id' => 1
]);
echo "Kayıt başarıyla güncellendi!";
?>
5. PHP ile MySQL Veri Silme (DELETE)
Bir kaydı silmek için DELETE FROM sorgusu kullanılır.
a) MySQLi ile Silme
<?php
$sql = "DELETE FROM kullanicilar WHERE id=1";
if ($baglanti->query($sql) === TRUE) {
echo "Kayıt başarıyla silindi!";
} else {
echo "Hata: " . $baglanti->error;
}
?>
b) PDO ile Güvenli Silme
<?php
$sql = "DELETE FROM kullanicilar WHERE id=:id";
$sorgu = $baglanti->prepare($sql);
$sorgu->execute([':id' => 1]);
echo "Kayıt başarıyla silindi!";
?>
6. Veritabanı Bağlantısını Kapatma
Bağlantıyı kapatmak için:
$baglanti->close(); // MySQLi için
$baglanti = null; // PDO için
7. PHP ve MySQL Kullanırken Dikkat Edilmesi Gerekenler
✅ SQL Enjeksiyonuna Karşı Önlem: Prepared Statements (PDO) kullanarak verilerinizi koruyun.
✅ Bağlantıyı Kapatın: Performans için gereksiz açık bağlantıları kapatın.
✅ Hata Yönetimi: Try-Catch kullanarak olası hataları yönetin.
✅ Güvenli Veritabanı Tasarımı: Kullanıcı girişlerinde filtreleme yaparak XSS ve SQL Injection saldırılarından korunabilirsiniz.
8. Özet ve Sonuç
Bu rehberde, PHP ile MySQL veritabanı bağlantısı kurmayı ve CRUD işlemlerini öğrendik. PHP ve MySQL kombinasyonu, dinamik web projeleri için güçlü bir çözümdür. Güvenlik önlemlerine dikkat ederek ve PDO kullanarak daha güvenli uygulamalar geliştirebilirsiniz.