Ik liep vandaag met een vriend tegen een vervelende situatie aan. Als je PDO gebruikt met prepared statements, dan beschermt PDO je tegen SQL-injectie.
Nu was het met [php]mysql_real_escape_string[/php] altijd zo dat een quote een backslash kreeg om ervoor te zorgen dat er SQL-injectie mogelijk was. In je database stond het dus ook met een backslash. Maar met PDO is dit niet meer zo, dan staat er geen backslash meer voor.
Maar wat gebeurt er nu als je een export van de database maakt en je importeert deze weer? Dan wordt SQL niet geescaped en krijg je fouten. Of denk ik nu verkeerd?
Maar wat gebeurt er nu als je een export van de database maakt en je importeert deze weer? Dan wordt SQL niet geescaped en krijg je fouten. Of denk ik nu verkeerd?
Als je het op een juiste manier exporteert en weer importeert is er niets aan de hand. Dat soort modules hebben daar een standaard afhandeling voor. Neem bijvoorbeeld csv, de correcte handel wijze bij een csv file voor quotes is dat een string wordt omringd door dubbele quotes. Als er binnen een string een dubbele quote voorkomt dat moet die worden voorafgegaan door een dubbele quote. Als een systeem dus correcte csv files exporteert en importeert zal die elke dubbele quote bij het exporteren vervangen door twee dubbele quotes en bij het importeren er weer 1 verwijderen.
Het staat met PDO prepared statements niet met een backslash in de database nee.
Met [php]mysql_real_escape_string[/php] was dit wel zo.
Dat betekend dan dat je mysql_real_escape_string() 2x per parameter gebruikte. Wat niet de bedoeling is. En als er tijdens het importeren iets fout gaat door missende backslashes betekend dat dat het tijdens het exporteren iets fout is gegaan.