Arkadaşlar merhaba, uzun süredir PHP ile uğraşıyorum ama PDO kullanımında hala bazı noktalarda kafam karışıyor. Özellikle güvenli sorgu yazarken prepared statements dışında nelere dikkat etmemiz gerekiyor? Mesela ben genelde sorguları placeholder ile hazırlayıp execute ediyorum, ama bazen bindParam mı yoksa bindValue mu kullanmalıyım diye tereddüt ediyorum. Ayrıca fetch modları da can sıkıcı olabiliyor, PDO::FETCH_OBJ mi yoksa FETCH_ASSOC mu daha güvenli? Bir de UTF-8 sorunları var, character set ayarlarını unutursanız veritabanından gelen veriler tuhaf olabiliyor. Sizler nasıl bir yol izliyorsunuz?
Bir diğer konu, exception handling. PDO hatalarını yakalamak için try-catch blokları kullanıyorum ama bazen bu hataların üretim ortamında kullanıcıya gösterilmesi güvenlik açığı yaratıyor. Hata mesajlarını loglarken nelere dikkat ediyorsunuz? Ben genelde PDO::ATTR_ERRMODE'u PDO::ERRMODE_EXCEPTION olarak ayarlıyorum, ama bu ayarın yanında hata raporlamayı özelleştirmek için ek bir katman eklemek şart mı? Özellikle büyük projelerde bu tarz hatalar patlamasın diye neler yapıyorsunuz?
Son olarak, SQL injection'dan korunmak için PDO'nun prepared statements yapısını kullanmanın yeterli olduğunu düşünüyorum ama bazı arkadaşlar input validation ve escaping'in de gerekli olduğunu söylüyor. Sizce prepared statements + input validation yapmak abartı mı, yoksa olmazsa olmaz mı? Mesela kullanıcıdan gelen bir ID değerini sorguda kullanırken bile integer olduğunu kontrol etmek şart mı? Deneyimlerinizi paylaşırsanız sevinirim, özellikle yeni başlayanlar için doğru alışkanlıkları oturtmak istiyorum.
Bir diğer konu, exception handling. PDO hatalarını yakalamak için try-catch blokları kullanıyorum ama bazen bu hataların üretim ortamında kullanıcıya gösterilmesi güvenlik açığı yaratıyor. Hata mesajlarını loglarken nelere dikkat ediyorsunuz? Ben genelde PDO::ATTR_ERRMODE'u PDO::ERRMODE_EXCEPTION olarak ayarlıyorum, ama bu ayarın yanında hata raporlamayı özelleştirmek için ek bir katman eklemek şart mı? Özellikle büyük projelerde bu tarz hatalar patlamasın diye neler yapıyorsunuz?
Son olarak, SQL injection'dan korunmak için PDO'nun prepared statements yapısını kullanmanın yeterli olduğunu düşünüyorum ama bazı arkadaşlar input validation ve escaping'in de gerekli olduğunu söylüyor. Sizce prepared statements + input validation yapmak abartı mı, yoksa olmazsa olmaz mı? Mesela kullanıcıdan gelen bir ID değerini sorguda kullanırken bile integer olduğunu kontrol etmek şart mı? Deneyimlerinizi paylaşırsanız sevinirim, özellikle yeni başlayanlar için doğru alışkanlıkları oturtmak istiyorum.