unsigned long mysql_real_escape_string(MYSQL *mysql,
char *to, const char *from, unsigned long length)
Beachten Sie, dass mysql
eine gültige,
offene Verbindung sein muss. Diese ist erforderlich, da das
Escape-Verhalten von dem Zeichensatz des Servers abhängt.
Beschreibung
Diese Funktion wird verwendet, um einen gültigen SQL-String zu erzeugen, den Sie in einer SQL-Anweisung benutzen können. Siehe Abschnitt 9.1.1, „Strings“.
Der String in from
ist als SQL-String mit
Escape-Zeichen unter Berücksichtigung des aktuellen
Zeichensatzes der Verbindung kodiert. Das Ergebnis wird in
to
platziert und ein abschließendes
Nullbyte angehängt. Kodierte Zeichen sind
NUL
(ASCII 0),
‘\n
’,
‘\r
’,
‘\
’,
‘'
’,
‘"
’ und Strg-Z (siehe
Abschnitt 9.1, „Literale: wie Strings und Zahlen geschrieben werden“). (Streng genommen verlangt MySQL
ein Escape-Zeichen im Anfrage-String nur für den Backslash
und die Sorte Anführungszeichen, in welche der String
eingefasst ist. Diese Funktion setzt auch die anderen Zeichen
in Anführungszeichen, damit sie in Logdateien leichter zu
lesen sind.)
Der String, auf den from
verweist, muss
length
Bytes lang sein. Den Puffer für
to
müssen Sie mit einer Länge von
mindestens length*2+1
Bytes zuweisen. (Im
schlimmsten Fall braucht vielleicht jedes Zeichen 2 Byte für
die Kodierung und am Ende muss noch Platz für das Nullbyte
vorhanden sein.) Wenn
mysql_real_escape_string()
zurückkehrt,
ist der Inhalt von to
ein auf null endender
String. Der Rückgabewert ist die Länge des kodierten Strings
ohne das abschließende Nullzeichen.
Wenn Sie den Zeichensatz für die Verbindung umstellen
müssen, sollten Sie die Funktion
mysql_set_character_set()
anstelle einer
SET NAMES
- (oder SET CHARACTER
SET
-)Anweisung verwenden.
mysql_set_character_set()
arbeitet wie
SET NAMES
, beeinflusst aber auch den von
mysql_real_escape_string()
verwendeten
Zeichensatz. Das tut SET NAMES
nicht.
Beispiel
char query[1000],*end; end = strmov(query,"INSERT INTO test_table values("); *end++ = '\''; end += mysql_real_escape_string(&mysql, end,"What's this",11); *end++ = '\''; *end++ = ','; *end++ = '\''; end += mysql_real_escape_string(&mysql, end,"binary data: \0\r\n",16); *end++ = '\''; *end++ = ')'; if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }
Die im Beispiel verwendete
strmov()
-Funktion gehört zur
mysqlclient
-Bibliothek und funktioniert wie
strcpy()
, gibt jedoch einen Zeiger auf die
abschließende Null des ersten Parameters zurück.
Rückgabewerte
Die Länge des in to
gesetzten Werts ohne
das abschließende Nullzeichen.
Fehler
Keine.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.