PHP PDO ile Try-Catch Hata Yönetimi ve Sık Karşılaşılan SQLSTATE Hataları
PDO'da Hata Yönetiminin Güvenlik Açısından Önemi
Bir veritabanı hatası oluştuğunda PHP varsayılan olarak ekrana tüm bağlantı dizesini, veritabanı kullanıcı adını ve şifresini yazdırabilir. Bu durum devasa bir güvenlik açığıdır. Try-Catch blokları ile hatalar yakalanmalı, detaylar log dosyasına kaydedilmeli ve son kullanıcıya genel bir mesaj gösterilmelidir.
Profesyonel Try-Catch Yapısı
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
// Hatayı log dosyasına yaz (kullanıcıya gösterme)
error_log("DB Hatası: " . $e->getMessage(), 3, __DIR__ . '/logs/db_errors.log');
// Kullanıcıya dostça mesaj ver
http_response_code(500);
echo "Sistemde geçici bir sorun oluştu. Lütfen daha sonra tekrar deneyiniz.";
exit;
}Sık Karşılaşılan SQLSTATE Hata Kodları ve Anlamları
| SQLSTATE | MySQL Kodu | Anlamı ve Çözümü |
|---|---|---|
| 28000 | 1045 | Access denied: Veritabanı kullanıcı adı veya şifresi yanlış. cPanel'den şifreyi kontrol edin ve kullanıcının veritabanına atanıp atanmadığını doğrulayın. |
| HY000 | 2002 | Can't connect to MySQL server: MySQL servisi çalışmıyor veya host adresi yanlış. Host olarak localhost veya 127.0.0.1 kullanın. |
| 42S02 | 1146 | Table doesn't exist: Sorgulanan tablo veritabanında bulunamadı. Tablo adının harf duyarlılığına dikkat edin. |
| 23000 | 1062 | Duplicate entry: Benzersiz (UNIQUE) bir alana (örneğin aynı e-posta) ikinci kez kayıt eklenmeye çalışılıyor. |
Faydalı oldu mu?
Geri bildiriminiz için teşekkürler!