SQL korrekt escapen

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

  • SQL korrekt escapen

    hi!

    magic_quotes macht mir einiges kopfzerbrechen. ich hab folgende funktionen geschrieben, für den fall, das magic_quotes nicht aktiviert ist:
    PHP-Code:
        function _quote($string)
        {
            if (isset(
    $string) && $string != "") {
                
    $string = (get_magic_quotes_gpc() == 0) ? addslashes($string) : $string;
            } else {
                
    $string NULL;
            }

            return 
    $string;
        }


        function 
    _strip($string)
        {
            if (isset(
    $string) && $string != "") {
                
    $string = (get_magic_quotes_gpc() == 0) ? stripslashes($string) : $string;
                
    $string htmlentities($string);
            } else {
                
    $string NULL;
            }

            return 
    $string
    wenn ich im programm das sql statement per echo ausgeben lasse, sind einfache und doppelte quotes, sowie der backslash korrekt mit einem \ maskiert. wenn ich die abfrage allerdings abschicke und die einträge in der datenbank überprüfe, sind die \ nicht mehr zu sehen.

    ist das normal, oder hab ich einen fehler gemacht?
    Zuletzt geändert von php_rookie; 26.02.2004, 15:35.

  • #2
    Re: SQL korrekt escapen

    Original geschrieben von php_rookie
    wenn ich die abfrage allerdings abschicke und die einträge in der datenbank überprüfe, sind die \ nicht mehr zu sehen.
    denkfehler deinerseits.

    die sache mit dem escapen betrifft lediglich die schnittstelle zur datenbank - die kann nichts damit anfangen, wenn in einem string, der mit hochkommata begrenzt ist, ein hochkomma drinsteht. also muss es an dieser stelle maskiert sein.

    in der datenbank selbst stehen deine daten aber natürlich ohne vorangestellte backslashes drin.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      das war verständlich, danke schön! gibt es eine möglichkeit das ganze zu testen?

      wenn ich z.b. ein statement habe, das wie folgt ausschaut:
      Code:
      $insert = "das ist ein 'test'.";
      bzw.
      $insert = 'das ist ein "test".';
      
      [...]
      
      $sql = "INSERT INTO `foo` (`bar`)
      VALUES ($insert)";
      und anschließend mysql_escape_string($sql) anwende, sollte es demnach keine gefahren mehr geben? oder findest du es besser die variablen mit den methoden oben zu escapen?

      Kommentar


      • #4
        wird mysql_escape_string() bzw. mysql_real_escape_string() auf das komplette sql-statement angewendet, inkl. variablen, oder auf die variablen einzeln, die erst dann ins statement eingebaut werden. gibts einen gravierenden unterschied zwischen addslashes() und mysql_escape_string()?

        variante 1:
        Code:
        $insert = "that's a test";
        
        $sql = "INSERT INTO `foo` (`bar`)
        VALUES ($insert)";
        
        $sql = mysql_escape_string($sql);
        $result = mysql_query($sql, $db);
        variante 2:
        Code:
        $insert = "that's a test";
        $insert = mysql_escape_string($insert);
        
        $sql = "INSERT INTO `foo` (`bar`)
        VALUES ($insert)";
        
        $result = mysql_query($sql, $db);
        welche variante stimmt und falls keine stimmt, wie wird es üblicherweise gemacht? die postings hier im forum sind in der hinsicht nicht eindeutig für mich.

        die überprüfung, ob magic_quotes aktiv ist und das anschließende stripslashes, falls dem so ist, hab ich jetzt mal weggelassen. mir gehts ausschließlich darum, den string korrekt escaped und möglichst einfach in die db bzw. zur schnittstelle zu bringen.

        bitte, danke ;-)

        Kommentar


        • #5
          http://de.php.net/manual/de/function...ape-string.php
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar

          Lädt...
          X