Veritabanından veri silme işlemi geri dönüşü olmayan bir işlem olduğu için, PDO'nun Prepared Statements özelliğini kullanmak hayati önem taşır. Bu yöntem, hem SQL Injection saldırılarını engeller hem de sorgunun sadece hedeflediğiniz satıra etki etmesini sağlar.
Bir kullanıcıyı veya içeriği ID numarasına göre silmek için en yaygın kullanılan yöntem şudur:
PHP
prepare($sql);
// 2. Silinecek verinin ID'sini belirleyin
$silinecek_id = 15;
// 3. Sorguyu güvenli bir şekilde çalıştırın
$sonuc = $sorgu->execute([
'urun_id' => $silinecek_id
]);
// 4. Silme işleminin gerçekleşip gerçekleşmediğini kontrol edin
if ($sorgu->rowCount() > 0) {
echo "Kayıt başarıyla silindi. Toplam: " . $sorgu->rowCount() . " satır.";
} else {
echo "Silinecek kayıt bulunamadı.";
}
} catch (PDOException $e) {
die("Silme işlemi sırasında hata oluştu: " . $e->getMessage());
}
?>
rowCount() ile Doğrulamaexecute() metodu sorgunun teknik olarak çalışıp çalışmadığını söyler (true/false). Ancak rowCount(), veritabanında gerçekten bir satırın silinip silinmediğini kontrol etmenizi sağlar. Eğer ID yanlışsa sorgu hatasız çalışır ama hiçbir şey silinmez; bu durumu rowCount() ile yakalarsınız.
Silme işlemi kalıcıdır. Kullanıcı arayüzünde (Frontend) mutlaka bir "Emin misiniz?" uyarısı veya PHP tarafında yetki kontrolü (sadece admin silebilir gibi) yapılması önerilir.
Birden fazla kaydı aynı anda silmek için IN operatörünü kullanabilirsiniz:
PHP
$ids = [1, 2, 3];
$yer_tutucular = str_repeat('?,', count($ids) - 1) . '?';
$sql = "DELETE FROM urunler WHERE id IN ($yer_tutucular)";
$sorgu = $pdo->prepare($sql);
$sorgu->execute($ids);
Güvenlik: Kullanıcıdan gelen ID değerinin bir SQL komutu olarak algılanmasını engeller.
Hata Yönetimi: try-catch blokları sayesinde veritabanı hatalarını kullanıcıya göstermeden arka planda loglayabilirsiniz.
Performans: Aynı silme sorgusu farklı ID'lerle tekrar tekrar çalıştırılacaksa, prepare işlemi bir kez yapılır ve performans kazancı sağlar.