Marc Reichelt: + MYSQL: Anführungszeichen und andere?

Hi an alle!

Bin gerade am intensiven Nachdenken, aber je mehr ich darüber nachdenke um so unklarer wird mir das Ganze.

Die Frage ist simpel:
Ich habe eine Variable, die ich in ein MySQL-Datenfeld schreiben will.
Diese Variable soll jedes beliebige Zeichen enthalten können und dann in die MySQL-Datenbank geschrieben werden.
Wie muss ich die Variable vorbereiten, dass ich folgenden einfachen Befehl ausführen kann:

$beispielvar = "Beliebiger Wert, also auch Zeilenumbrüche, Sonderzeichen und Anführungszeichen...";
// Variable vorbereiten, damit ab jetzt keine Fehler auftreten
mysql_query("INSERT INTO testtabelle (testfeld) values ('$beispielvar')");

Oder kann man einfach NUR die Funktion addslashes() verwenden?
Mein Problem daran ist dass es ja auch Zeilenumbrüche gibt, und alle weiteren Zeichen auch erlaubt sind...

Vielen Dank im Voraus!

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Frage: Wie wechselt Bill Gates eine Glühbirne?
Antwort: Gar nicht - er erklärt Dunkelheit(tm) zum Standard.
SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
http://emmanuel.dammerer.at/selfcode.html
  1. Hallo Marc!

    [...] Diese Variable soll jedes beliebige Zeichen enthalten können und dann
    in die MySQL-Datenbank geschrieben werden.
    Wie muss ich die Variable vorbereiten, dass ich folgenden
    einfachen Befehl ausführen kann:

    $beispielvar = "Beliebiger Wert, also auch Zeilenumbrüche,
    Sonderzeichen und Anführungszeichen...";
    // Variable vorbereiten, damit ab jetzt keine Fehler auftreten
    mysql_query("INSERT INTO testtabelle (testfeld) values ('$beispielvar')");

    Benutze die Funktion "mysql_escape_string()", um die Anführungszeichen zu escapen. Sondernzeichen sollten soweit kein Problem sein.

    Wenn du jedoch die Daten in eine HTML-Seite ausgeben möchtest, so empfiehlt sich die Verwendung der Funktion "htmlspecialchars()" oder "htmlentities()".

    SQL-Query in PHP:
     mysql_query("INSERT INTO testtabelle (testfeld) values (mysql_escape_string($beispielvar))");

    Mehr Informationen:
     - PHP-Handbuch: htmlspecialchars()
       http://de.php.net/manual/de/function.htmlspecialchars.php

    - PHP-Handbuch: htmlentities()
       http://de.php.net/manual/de/function.htmlentities.php

    - PHP-Handbuch: mysql_escape_string()
       http://de.php.net/manual/de/function.mysql-escape-string.php

    - dclp-FAQ: 16.18. Wie kann ich bösartigen Code in SQL-Abfragen unterbinden?
       http://www.dclp-faq.de/q/q-sql-injection.html

    1. SQL-Query in PHP:
      mysql_query("INSERT INTO testtabelle (testfeld) values (mysql_escape_string($beispielvar))");

      Muss natürlich folgendermaßen lauten:
       mysql_query("INSERT INTO testtabelle (testfeld) values (".mysql_escape_string($beispielvar).")");

      1. Moin!

        Muss natürlich folgendermaßen lauten:
        mysql_query("INSERT INTO testtabelle (testfeld) values (".mysql_escape_string($beispielvar).")");

        Nein! Nein! Nein! Das ist schnell und sehr schmutzig, sollte hier nicht als "richtige" Antwort stehenbleiben.
        Wo zum Teufel ist die FEHLERBEHANDLUNG?

        </archiv/2004/3/76197/#m438820>

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    2. Hallo Xava,

      Benutze die Funktion "mysql_escape_string()", um die
      Anführungszeichen zu escapen. Sondernzeichen sollten soweit kein
      Problem sein.

      Nein, besser ist mysql_real_escape_string():

      http://de3.php.net/mysql_real_escape_string

      mysql_escape_string() beruecksichtigt so Sachen wie Charset und
      Kodierung und so weiter nicht.

      Grüße,
       CK

      --
      Nichts zu begehren, das ist der Weg.
      http://wwwtech.de/
      1. Hi!

        Nein, besser ist mysql_real_escape_string():

        http://de3.php.net/mysql_real_escape_string

        mysql_escape_string() beruecksichtigt so Sachen wie Charset und
        Kodierung und so weiter nicht.

        Können wenn ich nur mysql_escape_string() verwende Fehler auftreten?
        Bei der Ausgabe formatiere ich sowieso später mittels htmlentities() alles um.

        cu

        Marc Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!
        Frage: Wie wechselt Bill Gates eine Glühbirne?
        Antwort: Gar nicht - er erklärt Dunkelheit(tm) zum Standard.
        SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
        http://emmanuel.dammerer.at/selfcode.html
        1. Hallo Marc,

          Nein, besser ist mysql_real_escape_string():

          http://de3.php.net/mysql_real_escape_string

          mysql_escape_string() beruecksichtigt so Sachen wie Charset und
          Kodierung und so weiter nicht.

          Können wenn ich nur mysql_escape_string() verwende Fehler
          auftreten?

          Du koenntest evntl. Probleme mit dem Zeichensatz bekommen.

          Grüße,
           CK

          --
          [remote-signature:http://www.defunced.de/cgi-bin/signature.pl]
          http://wwwtech.de/
  2. Hello,

    // Variable vorbereiten, damit ab jetzt keine Fehler auftreten
    mysql_query("INSERT INTO testtabelle (testfeld) values ('$beispielvar')");

    ... und was sie alle Zusammen vergessen haben:
    bevor Du mysql_(real_)escape_string($variable) benutzt, solltest Du noch die von PHP ggf. eingefügten Backslashes wieder entfernen

    also:  if(get_magic_quotes_gpc())
             {
               $variable = stripslashes($variable);
             }
             $variable = mysql_(real_)escape_string($variable);

    Das stripslashes() kann man natürlich am besten gleich rekursiv auf das ganze $_POST-Array anwenden.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau