mysql_real_escape_string()

Répondre
dtm
le 23/06/2010 à 10:54
dtm
Bonjour

J'ai lu la doc sur cette commande, fait quelques tests et une question m'est venue.

J'explique le contexte. J'ai une chaine de caractères qui simule l'input d'un formulaire
$String1 = '"ici la lune"' ;

Quand je fais un echo mysql_real_escape_string($String1);...j'obtiens logiquement \"ici la lune\"

mais quand j'utilise mysql_real_escape_string($String1) dans une requete INSERT, je trouve dans ma base "ici la lune"

Resultat, je suis un peu perdu...cela veux dire que si je souhaite lire ce champs puis le copier dans un autre champs ou dans une autre table, je dois refaire un mysql_real_escape_string() dessus avant de l'insérer?
ma requete genererait un erreur sans ca : INSERT INTO table VALUES("",""ici la lune"");
j'ai du mal a cerner clairement ce probleme de cote, double cotes. Pouvez vous m'eclairer Merci
dark_nemo
le 23/06/2010 à 11:25
dark_nemo
T'as pas comprit le fonctionnement de mysql_real_escape_string qui ajoute un backslash aux caractères spéciaux de la chaine mais qui ne backslash pas le délimitation de ta chaine.
En gros est pour faire simple.
Si ta chaine c'est $string = "je suis ici"; mysql_real_escape_string va te retourner $string = "je suis ici"; et non $string = \"je suis ici\"; car ça n'a aucun intéret de "backslasher" les délimitations de ta chaine.
Par contre si à l'intérieur de ta chaine il y a des caractères NULL, \x00, \n, \r, \, ', " ou \x1a ils seront "backslasher"
Exemple $string = "j'ai bien mangé\n\r"; va donner $string = "j\'ai bien mangé\\n\\r";
dtm
le 23/06/2010 à 14:52
dtm
merci Dark_nemo pour ta reponse

J'aurais du mettre des espaces pour que ca soit plus lisible. Les delimiteurs de la chaine sont des simple cote, les guillements sont dans la chaine

$String1 = ' "ici la lune" ' ;

Mais effectivement ...si je reprneds ton exemple, je m'attendais a trouver dans ma base j\'ai bien mangé\\n\\r
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours