Konuyu Açan
#1
Bir projede PDO ile veritabanına veri eklerken sık karşılaşılan bağlama hatalarını tartışmak istiyorum. Özellikle hata mesajları, bağlamayı etkilemeyen durumlar ve hangi hatalarda hangi yöntemlerin işe yaradığını konuşalım. Ama önce kısa bir senaryo üzerinden başlayayım:
[list]
- Yanlış yerleşim: Sorgu içinde ad yerine işaretçi kullanımı, bağlama tipinin yanlış seçilmesi (named vs question mark).
- Değer tipi hatası: sayısal sütuna string gönderimi veya tarih formatının uygun olmaması. PDO’nun hata sınıfını doğru yakalamak için PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION kullanmak faydalı olur.
- Tekil bağlama eksikliği: Tek bir değeri teker teker bağlamayı unutarak tüm referansların boş kalması durumları. Özellikle çoklu veri eklerken her parametre için bindValue veya execute ile dizi kullanımı gerekir.
- Adlandırılmış parametrelerle çalışırken bağlamanın adını sorguda doğru kullanma: :isim, :yas gibi, ama bağlama dizisinde anahtarın tam olarak aynı olması gerekir.
- Sadece ? işaretçisi kullanıp konum bazlı bağlama yapılırken dizinin sırasının sorgudaki sırayla eşleşmesi gerekir; yanlış sıralama tipik hata üretir.
- Veritabanı sürücüsüne bağlı kısıtlamalar: bazı sürücüler tarih veya boolean türlerinde farklı dönüşüm kuralları uygulayabilir; bu durumda PDO’nun bindValue’de PDO::PARAM_* sabitlerini kullanmak işe yarar.
- Sorguyu hazırlarken bindParam/bindValue yerine execute ile tek seferde dizi göndermek daha güvenli ve okunabilir olabilir; özellikle çok sayıda parametre olduğunda bu yön avantaj sağlar.
- Hataları yakalamak için try-catch bloklarında $stmt->errorInfo() veya $stmt->debugDumpParams() ile sorun kaynağını izlemek pratik olur.
- Veritabanı tarafında kolonsal ad alanı kullanıyorsanız adlandırılmış parametrelerle çalışmayı tercih edin; böylece karmaşıklığı azaltırsınız.
Siz hangi hataları en sık karşılaşıyorsunuz ve bunları nasıl çözdünüz? Özellikle performans ve güvenlik açısından sizin önerileriniz nelerdir?
