Gestion des échappements dans Mysql ?

Eléphanteau du PHP | 19 Messages

27 sept. 2007, 08:30

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 sept. 2007, 14:49

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 19 Messages

27 sept. 2007, 15:48

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 sept. 2007, 16:20

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
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...