Page 1 sur 1

Gestion des échappements dans Mysql ?

Posté : 27 sept. 2007, 08:30
par Tintin72
Bonjour,

Il y a quelque chose que je ne comprend pas bien au sujets des
échappements dans mysql.
J'ai désactivé tous les magic_quote dans php.ini pour
gérer moi même les échappements des apostrophes et des guillemets.
J'utilise donc mysql_real_escape_string pour chaque entrée dans
la bdd. En toute logique je pensais utiliser stripslash lors
de la récupération des données. Mais je viens de m'apercevoir
que même sans stripslash les données affichées n'ont pas
d'antislashes devant les ' et les ".
Mysql retire t-il automatiquement les échappements lors des extractions
de données ?

Merci

Posté : 27 sept. 2007, 14:49
par Ryle
En fait il les retire lors de l'enregistrement.. :)

L'ajout d'un antislash devant un caractère permet à mysql de savoir que celui-ci va nécessiter un traitement particulier. En l'occurence, devant une apostrophe, il lui permet de savoir que cette apostrophes ne termine pas la chaine, mais qu'elle correspond simplement à un caracatère comme un autre. Il considère donc ton " \' " comme un " ' ", et c'est ce qu'il va insérer en base.

Ainsi, aussi bien en base que lors de la restitution des données, ta chaine ne comportera pas d'antislash protecteur. En revanche, il te faudra à nouveau les ajouter pour mettre à jour ta valeur dans un update :)

Posté : 27 sept. 2007, 15:48
par Tintin72
En fait il les retire lors de l'enregistrement..
D'accoooooord! :D
Merci de m'avoir éclairé sur ce point parce que je commençais
à plus rien comprendre :wink:
J'ai regardé (mal peut être :oops: ) dans la doc de Mysql mais je n'ai pas vu
d'explication là dessus.
Donc pour toutes insertion (INSERT ou UPDATE) -> mysql_real_escape_string
et rien du tout pour tout ce qui concerne l'extraction de données.

Merci encore :wink:

Posté : 27 sept. 2007, 16:20
par Ryle
Vala :) C'est comme php en fait... quand tu fais une chaine où tu protèges un caractère, il ne t'affiche pas les caractères d'échappement :
echo " ma \"chaine\" entre guillemets "; // affiche bien : ma "chaine" entre guillemets
Ben MySQL fait pareil :)


Ps : Pense à ajouter le tag [Résolu] pour indiquer que ce sujet contient une solution
en cliquant sur le bouton Image en haut à gauche de ce sujet