Sven: mysql_real_escape_string() für MS-SQL nachgebaut

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

  1. 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";

  2. 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

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->