Hallo Rolf,
Ich finde die Beispiele in der MYSQL Doku nicht sehr hilfreich und ich habe auch jetzt keinen Toolstack hier, um zum Probieren ein C Programm zu schreiben (da wäre auch erstmal ein Schutthaufen über dem C-Wissen wegzuschippen...)
so richtig klar finde ich die Erklärungen auch nicht, wenn ich auch immerhin fließend C spreche.
Aber der Prosatext sagt, dass diese Funktion dazu da ist, Logfiles besser lesbar zu machen.
Das sagt er bei beiden Funktionen. Deshalb escapen beide Funktionen nicht nur den Backslash und die Anführungszeichen (was ausreichen würde, um das SQL-Statement "sicher" zu machen), sondern auch einige ASCII-Steuerzeichen, die eine Protokolldatei entstellen würden (CR, LF, EOF, NUL).
Der entscheidende Unterschied ist, so wie ich die Beschreibungen verstehe, dass man bei mysql_real_escape_string_quote() noch angeben kann, welchen String-Delimiter man denn im SQL-Statement verwendet. Ist das beispielsweise das Double Quote 0x22, dann können Single Quotes 0x27 oder Backticks 0x60 unmaskiert bleiben und die Logdatei wird tatsächlich besser lesbar, wenn diese Zeichen noch in den Daten vorkommen. Das ist aber IMHO wirklich ein Luxusfeature.
Und der einzige Weg, auf dem sie das tun könnte, scheint mir darin zu bestehen, dass nur das genannte Quote escaped wird und die übrigen nicht. D.h. diese Funktion schließt keine Sicherheitslücke, sondern entfernt unnötiges Quoting zu Gunsten der Lesbarkeit.
Genua.[tm]
Immer eine Handbreit Wasser unterm Kiel
Martin
Wenn ich den See seh, brauch ich kein Meer mehr.