# PHP PDO ile Try-Catch Hata Yönetimi ve Sık Karşılaşılan SQLSTATE Hataları

https://bihostnet.com/bilgi-bankasi/makale/php-pdo-try-catch-hata-yonetimi-sqlstate-kodlari

## 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. |
