PDO und mysql_real_escape_string

Strafi

Erfahrenes Mitglied
Grüße,

Ich benutze PDO um mit meiner Datenbank zu arbeiten. Wenn ich Daten schreibe und zb. Namen wie O'Tool ider Marc D'mare verwende, escape ich sie. Aber nun steht in der Datenbank Marc D\\\'mare drin. Aber es soll doch nur Marc D'mare stehen.

Wie schaffe ich es einen Eintrag in die Datenbank zu setzen, ohne die Escape''''''s zu übernehmen?
 
Moin,

diese Daten, kommen die aus Formularen?

Falls ja: du musst erst, falls magic_quotes_gpc auf ON steht, die Daten mit stripslashes() bereinigen, ansonsten wird 2. escaped

Aber ansich: Was fummelst du da bei PDO überhaupt mit mysql_real_escape_string() herum :eek:
 
Hi,

prüfe bitte die Einstellung deines Webservers (php.ini). Wenn hier Magic Quotes auf "on" steht, werden Benutzereingaben bereits von PHP gequotet. Da ich diese Option sehr hasse, verwende ich nachfolgende Funktion, um alle durch Magic Quotes maskierten Eingaben zu demaskieren. Das Gute daran ist, dass bei konsequenter Verwendung der Funktion die php.ini Einstellung Magic Quotes völlig egal ist - die Software verhält sich immer gleich. Bei der Einstellung "on" werden die Escapes entfernt, bei der Einstellung "off" bleibt die übergebene Variable unverändert.

PHP:
    function stripslashesDeepMQ ($value)
    {
        if (!(function_exists ('get_magic_quotes_gpc') && get_magic_quotes_gpc ()))
        {
            return $value; 
        }
                
        if (is_array ($value))
                $value = array_map ('stripslashesDeepMQ', $value);
        else    $value = stripslashes ($value);

        return $value;
    }
    
    // example
    $var = stripslashesDeepMQ ($_POST ['var']);

Darüber hinaus escaped PDO bei der Verwendung von Prepared Statements (PDO::bind*) automatisch. Du musst also vorher nicht escapen. Anders verhält sich bei PDO::exec oder PDO::query.

Grüße BN
 
ahhhh ich benutze das ungefähr so

$stmt = $this->db->prepare("INTO ....
$stmt->bindParam(':name', $this->name);......

da aber das system auf PDO umgestellt wird, ist es wahrscheinlich so, das da noch ne funktion läuft die das stript

aber danke für die hilfe und vorallem der funktion...
 
Zurück