mysql_real_escape_string - mach ich was falsch?

  • Per Formular gebe ich Daten in eine Datenbank ein. Unter anderen können dabei Namen auch ein Semikolon oder Hochkomma haben (je nachdem, was der "Eingeber" bevorzugt).
    Vorab: in PDO muss ich mich erst reindenken/arbeiten, dazu bin ich noch nicht fit genug. Also "erstmal" auf herkömmlichem Weg sichern. Zur Übergabe an die Datenbank nutze ich mysql_real_escape_string.
    Gibt jemand z.B. d'Artagnan ein, steht es bei mir auch genauso in der Datenbank. Wäre zwar schön, wenn das so möglich wäre (dann wären die Namen nicht so verstümmelt) - aber ich denke ich mache was falsch weil doch eigentlich d\'Artagnan drin stehen müsste, oder?

    zwei Möglichkeiten habe ich bisher genutzt:

    PHP
    $values = $_POST;
    foreach ($values as &$value) {
    $value = mysql_real_escape_string($value);
    }
    //für sql
    '$values[name]'

    oder nur im VALUE

    Code
    '" . mysql_real_escape_string($name) . "'
  • Sorry für die späte Antwort...
    egal wie ich es drehe und wende, ob mit PDO oder althergebracht....
    $name="d'Artagnan";
    insert in Datenbank: d'Artagnan
    echo-Ausgabe der Variablen: d\'Artagnan

    ist das falsch oder richtig so wie es in der Datenbank steht (oder muss der Backslash auch in der Datenbank stehen)?


    EDIT: als PDO-Anfänger mal eine andere Variante probiert und es steht mit Backslash in der Datenbank...

    Einmal editiert, zuletzt von TanjaP. (1. März 2013 um 14:46)

  • Der Blackslash landet ja nicht direkt in der Datenbank sondern erstmal in deinem Query:

    Code
    'd\'Artagnan'


    Die Datenbank nimmt den Backslash dann raus und schreibt den Rest in die Tabelle. Ohne den Backslash bekommst du (auf MySQL) nen Fehler so wie

    Code
    You have an error in your SQL syntax; check the manual that corresponds  to your MySQL server version for the right syntax to use near ''d''

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!