CRUD İşlemleri 4: Veri Silme ve Silme Onayı (Delete)

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
Veri silme işlemi, bir kaydın fiziksel olarak veritabanından kaldırılmasıdır. Bu işlemde hata payı yoktur; silinen veri (yedek yoksa) geri getirilemez. 2026 standartlarında bir geliştirici olarak, doğrudan "Hard Delete" (kalıcı silme) yerine genellikle veriyi sadece gizleyen "Soft Delete" yöntemini tercih etmelisiniz.

1. Kalıcı Silme (Hard Delete)​


Bu yöntem, veriyi tablodan tamamen temizler. WHERE şartı kullanılması hayati önem taşır.

PHP:
<?php
require_once 'Database.php';

try {
$db = Database::getInstance()->getConnection();

$silinecekId = 12;

// Sorguyu hazırla
$sql = &quot;DELETE FROM uyeler WHERE id = :id&quot;;
$sorgu = $db-&gt;prepare($sql);

// Çalıştır
$sorgu-&gt;execute([&#39;id&#39; =&gt; $silinecekId]);

if ($sorgu-&gt;rowCount() &gt; 0) {
    echo &quot;Kayıt başarıyla kalıcı olarak silindi.&quot;;
} else {
    echo &quot;Silinecek kayıt bulunamadı.&quot;;
}

} catch (PDOException $e) {
echo "Hata: " . $e->getMessage();
}
?>

2. Güvenli Silme (Soft Delete) - Profesyonel Yöntem​


Büyük projelerde (XenForo dahil) veriler nadiren gerçekten silinir. Bunun yerine tabloda is_deleted veya deleted_at gibi bir sütun tutulur. Veri silinmek istendiğinde bu sütun güncellenir.

Avantajı: Yanlışlıkla silinen veriyi tek bir komutla geri getirebilirsiniz (Undo).

PHP:
// Silme işlemi yerine GÜNCELLEME yapıyoruz
$sql = "UPDATE uyeler SET is_deleted = 1, deleted_at = NOW() WHERE id = :id";
$db->prepare($sql)->execute(['id' => $id]);

// Verileri çekerken sadece silinmemiş olanları çağırıyoruz
$sqlSelect = "SELECT * FROM uyeler WHERE is_deleted = 0";

3. Kullanıcıdan Silme Onayı Alma (Frontend)​


Bir silme butonuna tıklandığında işlemin anında gerçekleşmesi kötü bir kullanıcı deneyimidir. JavaScript ile bir onay mekanizması kurmak şarttır.

HTML:
<a href="sil.php?id=12" onclick="return confirm('Bu kaydı silmek istediğinize emin misiniz? Bu işlem geri alınamaz!');">
Kaydı Sil
</a>

Silme İşlemi Güvenlik Tablosu​


YöntemRizikoKullanım Yeri
Hard DeleteÇok YüksekGeçici tablolar, log dosyaları, önemsiz veriler.
Soft DeleteDüşükKullanıcılar, konular, siparişler, mesajlar.
Cascade DeleteOrtaİlişkili veritabanlarında otomatik temizlik.

4. İlişkili Verileri Yönetme (Foreign Keys)​


Bir üyeyi sildiğinizde, o üyeye ait 500 tane mesaj ne olacak?

  • [] ON DELETE CASCADE: Üye silindiğinde mesajları da otomatik silinir.
    [] ON DELETE SET NULL: Üye silinir, mesajların sahibi "Misafir" veya "Silinmiş Üye" olarak güncellenir.

Sonuç​


CRUD döngüsünü tamamladık! Silme işlemi, sahip olduğunuz en keskin araçtır. Bu aracı kullanırken her zaman WHERE şartını iki kez kontrol edin, mümkünse "Soft Delete" mimarisini benimseyin ve kullanıcılarınıza mutlaka bir "Emin misiniz?" sorusu yöneltin.
 
Geri
Üst