mysql_real_escape_string() für MS-SQL nachgebaut
Sven
- php
Hallo ihr,
ich muss derzeit leider meine Seite umstellen auf MS-SQL. Vorher hab ich mit MySQL gearbeitet.
Nun möchte ich Escape-Strings vor dem Eintrag in die Datenbank maskieren, was ich bisher immer mit mysql_real_escape_string() gemacht hab. Leider gibt es wohl keine solche Funktion für MS-SQL.
Also hab ich folgende Funktion geschrieben:
function escape_string($string) {
$tmp = $string;
$tmp = str_replace('\','\\',$tmp);
$tmp = str_replace("'","'",$tmp);
$tmp = str_replace('"','"',$tmp);
return $tmp;
}
Ziel soll sein: Alle Backslashes mit einem weiteren Backslash zu maskieren. Alle einfachen und doppelten Anführungszeichen maskieren. Im Grunde diese Funktionalität bieten: http://de.php.net/manual/en/function.mysql-real-escape-string.php
Da ich alle Backslashes maskiere, dürfte das ja auch auf \n \r \x1a usw. zutreffen.
Kann man das so machen, ist das richtig? Oder habe ich etwas übersehen?
Grüße
Sven
echo $begrüßung;
ich muss derzeit leider meine Seite umstellen auf MS-SQL. Vorher hab ich mit MySQL gearbeitet.
Nun möchte ich Escape-Strings vor dem Eintrag in die Datenbank maskieren, was ich bisher immer mit mysql_real_escape_string() gemacht hab. Leider gibt es wohl keine solche Funktion für MS-SQL.
Ziel soll sein: Alle Backslashes mit einem weiteren Backslash zu maskieren. Alle einfachen und doppelten Anführungszeichen maskieren.
Bist du sicher, dass das die richtige Methode ist? (Wenn es die richtige wäre hätte ich keinen Einwand vorzubringen.) Gemäß Using char and varchar Data gelten andere Regeln für das Maskieren von entweder einfachen oder doppelten Anführungszeichen. Siehe auch Security Considerations for SQL Server - SQL Injection im Abschnitt Filtering Input, und für LIKE, wenn die Zeichen keine Joker-Funktion haben sollen, den folgenden. Informiere dich auf alle Fälle in dem für deine Server-Version zuständigen Handbuch. Ich hab hier das vom SQL Server 2005 verlinkt.
Da ich alle Backslashes maskiere, dürfte das ja auch auf \n \r \x1a usw. zutreffen.
Ja, aber nur, wenn diese als String, also als \ gefolgt von n usw. notiert sind, nicht, wenn diese bereits als ein Zeichen vorliegen
echo "$verabschiedung $name";
Yerf!
Da ich alle Backslashes maskiere, dürfte das ja auch auf \n \r \x1a usw. zutreffen.
Auf die Zeichenfolge \n (bestehend aus 2 Zeichen) schon, aber nicht auf das Zeilenumbruchszeichen CHR(13), das häufig mittels \n in Strings ausgedrückt wird. (Das gilt analog auch für die anderen Beispiele)
Gruß,
Harlequin