sparh Posté 11 Juin 2013 Posté 11 Juin 2013 (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 : Et voici le résultat de ma requête ?? SELECT id FROM Clients WHERE titre LIKE 'Parrat & D\'angelo Architectes' Je ne comprends pas, avez vous une idée ? Modifié 11 Juin 2013 par sparh
Aenoa Posté 11 Juin 2013 Posté 11 Juin 2013 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)
sparh Posté 11 Juin 2013 Auteur Posté 11 Juin 2013 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
captain_torche Posté 11 Juin 2013 Posté 11 Juin 2013 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.
Dadou Posté 11 Juin 2013 Posté 11 Juin 2013 recherche SELECT id FROM Clients WHERE titre LIKE "Parrat & D\'angelo Architectes" ou SELECT id FROM Clients WHERE titre LIKE "Parrat & D'angelo Architectes"
sparh Posté 11 Juin 2013 Auteur Posté 11 Juin 2013 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'
captain_torche Posté 11 Juin 2013 Posté 11 Juin 2013 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.
sparh Posté 11 Juin 2013 Auteur Posté 11 Juin 2013 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
Dadou Posté 11 Juin 2013 Posté 11 Juin 2013 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.
captain_torche Posté 11 Juin 2013 Posté 11 Juin 2013 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)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant