Hi!
Du hast recht - aber nicht ganz: "besser" mache ich es schon (die injection wird zweifelsfrei verhindert), nur nicht "ideal richtig". Das hast Du dann getan.
Nein, mysql_real_escape_string() kann nicht zaubern. Hier geht es nicht um einen Unterschied wie zwischen "richtig" und "richtig plus elegant" sondern um "falsch" und "richtig". Das ist ja grade der Punkt, wenn du keinen String einleitest, muss ich mir als Angreifer keine Mühe machen, ihn zu verlassen, denn ich bin bereits im Anweisungsteil und kann sofort loslegen, nachdem ich ungehindert von mysql_real_escape_string() die Anweisungsteil beendet habe. Im konkreten Fall muss nur mit ein paar schließenden Klammern das CONTAINS() beendet werden, und anschließend kann man weitere Bedingungen hinzufügen (OR 1=1, um sich unberechtigterweise alles ausgeben zu lassen) oder mit UNION Abfragen anderer Tabellen (die mit den Passwörtern oder -hashes vielleicht) hinzufügen.
Lo!