Aller au contenu

Sélectionner un champ contenant un apostrophe


Sujets conseillés

Posté (modifié)

Bonjour,


je ne pensais pas bloquer un jour sur ce genre de problème et je suis très étonné de ne jamais l'avoir rencontré avant.



Je n'arrive pas à sélectionner le champ d'une table si la chaine de caractère contient un apostrophe.



Donc je suis dans phpMyAdmin, voici ma table :


261210sql1.png



Et voici le résultat de ma requête ??



SELECT id FROM Clients WHERE titre LIKE 'Parrat & D\'angelo Architectes'

302079sql2.png





Je ne comprends pas, avez vous une idée ?


Modifié par sparh
Posté

l'apostrophe est échappée ( \' ) afin d'éviter toute injection de code qui créerais une faille de sécurité sur ton site web ou base de données.


C'est tout à fait normal. Si tu entre tes données directement via PHPMyAdmin, soit tu remplaces les ' par des \' dans tes valeurs, soit tu met un accent sans caractère pour "entourer" le texte désiré. à savoir:



SELECT id FROM Clients WHERE titre LIKE `Parrat & D'angelo Architectes`

Dans ce code, j'ai utilisé le caractère `, qui est l'accent grave. tu peux le faire en faisant ALT GR + µ (en clavier Belge) et ALT GR + 7 (pas du pavé numérique, celui au dessus de Y et U)


Posté

Merci mais ta requête me renvoi : Unknown column 'Parrat & D\'angelo Architectes' in 'where clause'



Dans la table la chaîne est enregistré avec un \ car j'enregistre mes données en utilisant mysql_real_escape_string


Je cherche donc la chaîne : Parrat & D\'angelo Architectes

Posté

Dans ce cas, recherche 'Parrat & D\\\'angelo Architectes' (Le premier antislash échappe le second, le troisième échappe l'apostrophe), mais c'est assez dégueulasse.


Posté

recherche



SELECT id FROM Clients WHERE titre LIKE "Parrat & D\'angelo Architectes"

ou



SELECT id FROM Clients WHERE titre LIKE "Parrat & D'angelo Architectes"
Posté

Pfiuuu merci pour vos conseils.


Avec LIKE rien à faire ça ne passe pas



SELECT id FROM Clients WHERE titre LIKE "Parrat & D\'angelo Architectes"

SELECT id FROM Clients WHERE titre LIKE "Parrat & D'angelo Architectes"

SELECT id FROM Clients WHERE titre LIKE "Parrat & D\\\'angelo Architectes"


Par contre avec = et \\\ ça marche !



SELECT id FROM Clients WHERE titre = 'Parrat & D\\\'angelo Architectes'
Posté

Mais il y a un souci dans ta base : les données ne sont pas censées y être échappées.


Comme je te l'ai dit, la version avec trois apostrophes est dégueulasse : dans l'idéal, il faudrait nettoyer ta base.


Posté

Je pense savoir d'ou ça vient, sur mon serveur magic-quotes est activé.


Et comme quand j'enregistre mes données en échappant avec mysql_real_escape_string ça fait double échappement!



captain_torche --> si tu as une idée pas trop compliquée pour nettoyer la base (enlever tous les caractères qui ont été échappés 2 fois!) je suis preneur :)

Posté

Personnellement, je n'utilise que PDO pour traiter mes requêtes, et surtout, j'use et j'abuse des requêtes préparées et des bindparams, et donc pas besoin de s'amuser à nettoyer avec mysql_real_escape_string, PDO, le traite correctement.


Posté

Après un backup de ta table, tu pourrais essayer ceci :



UPDATE table SET champ = REPLACE(champ, "\\'", "'")

Le premier paramètre, sans les doubles quotes, est \\' (Deux antislashes et une simple quote)


Le second paramètre, sans les doubles quotes, est ' (Une simple quote)


Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...