SQL en PDO prepared
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 mysql_real_escape_string 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?
Opheldering graag! :-)
Weet je zeker dat het met een backslash in de database staat?
Normaal gesproken met je een export gewoon weer kunnen importeren.
Met mysql_real_escape_string was dit wel zo.
Roel PHP op 15/10/2013 13:53:29:
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.
Roel PHP op 15/10/2013 14:25:45:
Het staat met PDO prepared statements niet met een backslash in de database nee.
Met mysql_real_escape_string was dit wel zo.
Met mysql_real_escape_string 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.