SevkiBilge

PHP'de PDO ile Güvenli Veri Tabanı Bağlantısı Nasıl Yapılır?

KadirSahinTech
· 5 gün önce · 3 görüntülenme
Arkadaşlar herkese merhaba, uzun zamandır PHP ile uğraşıyorum ama veri tabanı bağlantılarında hep eski tarz mysql_* fonksiyonlarını kullanıyordum. Geçenlerde bir projede güvenlik açığı fark edince kendime geldim ve PDO'ya geçmeye karar verdim. Gerçekten de PDO ile bağlantı kurmak ilk başta biraz karışık geldi açıkçası. Özellikle prepared statements ve bindParam gibi yapıların ne kadar önemli olduğunu sonradan anladım. Ben şu anda bir blog sitesi için veri tabanı bağlantısı yapıyorum, sizlerin deneyimlerini merak ediyorum.

PDO ile bağlantı kurarken en çok zorlandığım nokta exception handling oldu. try-catch blokları içinde PDOException'ı yakalamak gerekiyor ama bazen hata mesajlarını doğrudan kullanıcıya göstermemek için nasıl bir yol izlemeliyiz? Örneğin ben şöyle bir şey yazdım:

try {
$db = new PDO("mysql:host=localhost;dbname=blog;charset=utf8", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
error_log($e->getMessage());
die("Veritabanı bağlantısında bir sorun oluştu.");
}

Bu yaklaşım doğru mu sizce? Yoksa hata mesajlarını daha detaylı loglayıp, kullanıcıya daha anlamlı bir mesaj mı vermeliyiz? Ayrıca PDO bağlantısını global bir değişken olarak mı tutmak daha iyi yoksa her sayfada yeniden mi oluşturmalıyız? Ben şu an bir config dosyasında tutup include ediyorum ama performans açısından sıkıntı yaşar mıyım?

Bir de SQL injection konusunda PDO'nun ne kadar koruma sağladığını test etmek için denemeler yaptım. Prepared statements kullanmadan direkt query çalıştırınca hala açık var mı? Mesela ben şu kodu denedim:

$stmt = $db->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $_POST['username']]);

Bu yöntem tamamen güvenli mi, yoksa ekstra bir filtreleme yapmalı mıyım? Özellikle LIKE sorgularında wildcard karakterleri sorun çıkarıyor mu? Deneyimli arkadaşların bu konuda tavsiyelerini bekliyorum, çünkü yeni başlayanlar için PDO bazen kafa karıştırıcı olabiliyor.
1 yanıt
HilmiColakWeb
4 gün önce
PDO gerçekten güvenli bağlantı için en iyi seçeneklerden biri. Özellikle prepared statements kullanarak SQL injection'a karşı ciddi bir koruma sağlıyorsun. Bağlantı için DSN ayarlarını doğru yapıp charset utf8mb4 eklemeyi unutma, ayrıca exception mode'u aktifleştirirsen hataları yakalamak çok daha kolay olur.

Yanıt yazmak için giriş yapın.