Benim gibi projenizde bir altyapı değişikliği yapıyorsanız, muhtemelen yeniden ele aldığınız kısımlardan biri de veritabanı bağlantısı ile ilgili kısımlar oluyor. Biz de bu noktada Doctrine DBAL kullanmaya karar verdik. Henüz ORM implemente etmek için yolumuz var. O yüzden sadece DBAL katmanını kullanacağız. Ancak burada mysql_real_escape_string vasıtası ile escape ettiğimiz verileri, artık DBAL tarafına geçerken birsürü yerde replace işlemi yapmak istemiyorsanız birkaç önerim olacak.
mysql_Real_Escape artık projenizde düzgün çalışmayacaktır diye tahmin ediyorum. Çünkü artık classlar üzerinden çalışıyorsunuz, ve buradaki mysql doğru connectionı bulamayabilir. (özellikle master slave ilişkili çift veya daha fazla db mimarisinde)
Tabi ki işin doğrusu statement->prepare metodu üzerinden bindParam veya bindValue ile ilerlemek. Ancak bunları için oldukça uzun bir vakit gerekebilir.
Biz de mysql_real_escape_string’in karşılığı olarak bir metod bulduk. Connection nesnesi üzerinde bulunan quote metodu.
$conn->quote(”) dediğimiz metod tam da istediğimiz şekilde çalışıyor. Hatta connection objesindeki ekstra parametreler kısmına ATTR_EMULATE_PREPARES=> true verirseniz, bu metod bildiğiniz mysql_Real_escape işlemini yapıyor. bu parametredeki tek handikap, çoklu querylerin tek seferde çalıştırılamaz hale gelmesi oluyor.
quote’un mysql_Real escape’ten tek farkı başına ve sonuna bir tırnak koyuyor. siz bunları substr ile çıkartırsanız birebir aynı olacaktır.
dikkat etmeniz gereken bir şey de şu ki, mysql server’ınızın encoding’i ile (server encodinginizin mysql e bağlanıp show variables like ‘%char%’ seklindeki degisklenlerden gorebilirsiniz) connection (DBAL ayarlarından verilen encoding) aynı olması gerkeiyor ki güvenli bir escape işlemi yapılabilsin.