Warum kein SQL-Fehler ohne Escapen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Warum kein SQL-Fehler ohne Escapen?

    Hallo!

    Ich möchte gerne PHP-Quelltext in die Datenbank einfügen, das funktioniert auch ganz wunderbar, allerdings für meine Verhältnisse verdächtig zu gut. Ich habe in etwa folgenden (sinngemäßen) code:

    PHP-Code:
    $code '$test = SLASH'22SLASH'; echo $test;';

    mysql_query("UPDATE tablle SET code = '$test'"); 
    (Jeweils dort wo SLASH steht habe ich einen Backslash (\) eingefügt, aber der Syntax-Highlighter scheint den zu killen...)


    Meines Wissens dürfte doch nun folgendes passieren: Wenn die Variable $test im String der an mysql_query() übergeben wird aufgelöst wird, sollte sich soetwas hier ergeben:
    Code:
    UPDATE tablle SET code = '$test = '22'; echo $test;'
    Ich würde also erwarten, dass MySQL denkt, dass die Zeichenkette bereits nach '$test = ' beendet ist, da ja hier das entsprechend passende Hochkomma erscheint.

    Witzigerweise passiert aber folgendes: Es funktioniert! Ganz ohne Probleme wird der Code vollkommen korrekt in die Datenbank geschrieben, und kann auch tadellos wieder ausgelesen werden. Ich hatte vorher mysql_real_escape_string() außendrum gemacht, aber dann waren überall Slashes, und die wurden auch in der Datenbank gespeichert. Kann mir dieses Verhalten einer erklären? Wäre echt interessant, danke schonmal!
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

  • #2
    Re: Warum kein SQL-Fehler ohne Escapen?

    Original geschrieben von ArSeN
    Meines Wissens dürfte doch nun folgendes passieren: Wenn die Variable $test im String der an mysql_query() übergeben wird aufgelöst wird, sollte sich soetwas hier ergeben:
    Code:
    UPDATE tablle SET code = '$test = '22'; echo $test;'
    Ich würde also erwarten, dass MySQL denkt, dass die Zeichenkette bereits nach '$test = ' beendet ist, da ja hier das entsprechend passende Hochkomma erscheint.
    Warum? Du hast doch vorher selbst gesagt, dass vor dem Hochkomma noch ein Backslash steht.

    Witzigerweise passiert aber folgendes: Es funktioniert!
    Nicht witziger-, sondern logischerweise.

    Ich hatte vorher mysql_real_escape_string() außendrum gemacht, aber dann waren überall Slashes, und die wurden auch in der Datenbank gespeichert. Kann mir dieses Verhalten einer erklären?
    Was glaubst du denn, wie oft das schon erklaert wurde - in aller epischen Breite ...?

    mysql_real_escape_string ist die absolut einizige Funktion, die du nutzen solltest, um Daten vor dem Einsetzen in einen MySQL-Query-String zu behandeln.
    Wenn dabei "zusaetzliche" Backslashes in den Daten "erzeugt" werden - dann waren diese vermutlich schon vorher da, sTichwort magic_quotes.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Re: Re: Warum kein SQL-Fehler ohne Escapen?

      Wenn ich die Backslashs nicht hinschreibe, bekomme ich ja wohl Probleme bei
      PHP-Code:
      $code '$test = '22'; echo $test;' 
      weil der String dann scheinbar zu früh terminiert wird, wie das Syntax-Highlighting schon verrät ... oder spinn ich jez? Also is der Backslash ja wohl nur zum Escapen für die Stringzuweisung... naja jedenfalls herzlichen Dank für den Hinweis mit magic_quotes, das wars natürlich.
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar

      Lädt...
      X