Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2011, 19h06   #1
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Par défaut Requête avec les antislash

J'ai une requete qui ne me retourne rien du tous meme sil ya un champs dans la base product_name qui a la valeur az\'zer\'a
Code :
1
2
 
SELECT * FROM products WHERE product_name = 'az\'zer\'az'
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 19h52   #2
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Bonsoir,

L'anti-slash est un caractère d'échappement.
Il faut le doubler pour signifier le caractère '\'.

Code :
SELECT * FROM products WHERE product_name = 'az\\'zer\\'az'
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 11h34   #3
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Je l'ai vérifier mais je n'ai aucun résultat
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 19h06   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 984
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 984
Points : 18 231
Points : 18 231
Envoyer un message via MSN à CinePhil
La coloration syntaxique de la requête te montre qu'il y a un problème aussi avec l'apostrophe. Elle aussi, il faut la doubler.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 19h26   #5
Nouveau Membre du Club
 
Inscription : novembre 2003
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 42
Points : 36
Points : 36
Pourquoi ne pas utiliser les doubles quotes ?
Code :
SELECT * FROM products WHERE product_name = "az'zer'az"
apophyss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 19h28   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 984
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 984
Points : 18 231
Points : 18 231
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par apophyss Voir le message
Pourquoi ne pas utiliser les doubles quotes ?
Code :
SELECT * FROM products WHERE product_name = "az'zer'az"
Parce que les valeurs textuelles ne s'écrivent pas entre guillemets mais entre apostrophes en SQL.
Et apparemment, dans sa valeur cherchée, il y a des antislashes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2011, 19h38   #7
Nouveau Membre du Club
 
Inscription : novembre 2003
Messages : 42
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 42
Points : 36
Points : 36
Dommage,
perso je n'utilise que ça (et je gagne un temps fou en codage, relecture et débuggage)
vu que l'apostrophe est utilisé dans les textes (surtout en français) alors que les doubles quote, dièse et autres, ce sont des plus des caractères spéciaux...

Vu comment MySQL est permissif (trop même à mon gout)...
apophyss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h17   #8
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Citation:
Envoyé par apophyss Voir le message
Pourquoi ne pas utiliser les doubles quotes ?
Code :
SELECT * FROM products WHERE product_name = "az'zer'az"
A l'insertion j'utilise la fonction addslashes qui ajoute des antislash a ma requête, si j'utilise les double quotes et le client insert les doubles quotes j'aurai des problème .
CinePhil j'ai ajouter un autre antislash pour l'apostrophe et j'ai encore le même problème.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 10h45   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 984
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 984
Points : 18 231
Points : 18 231
Envoyer un message via MSN à CinePhil
Si ta donnée existante est bien celle que tu annonces dans ton premier message :
Citation:
az\'zer\'a
Alors il faut doubler les antislashes et les apostrophes :
Code :
1
2
3
SELECT * 
FROM products 
WHERE product_name = 'az\\''zer\\''a'
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h11   #10
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Ça marche très bien. Merci
J'ai une autre question est ce qu'il y'a une fonction qui peu le faire à ma place
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 11h23   #11
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Quand je fait
Code :
1
2
3
4
 
SELECT * 
FROM products 
WHERE product_name LIKE '%az\\''zer\\''a%'
Ça marche plus
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 13h27   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 984
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 984
Points : 18 231
Points : 18 231
Envoyer un message via MSN à CinePhil
Citation:
Ça marche plus
Normal, ça n'a pas de jambes !

Symptômes ?
- message d'erreur ?
- pas de résultat ?
- pas le bon résultat ?

Ceci dit, tu te compliques vraiment la vie avec ton addslashes ! Ça rend tes données illisibles ! C'est quoi ce nom de produit az\'zer\'a ? Un thermo-vibrilafuseur kryptonnien ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 14h58   #13
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Citation:
Envoyé par CinePhil Voir le message
C'est quoi ce nom de produit az\'zer\'a
C'est seulement des noms de teste.
la requête ne m'envois aucun résultat.
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 15h08   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 984
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 984
Points : 18 231
Points : 18 231
Envoyer un message via MSN à CinePhil
Je viens de créer une table test avec une colonne en VARCHAR(50) puis j'ai cliqué sur l'onglet "Insérer" de phpMyAdmin, j'ai copié ta donnée bizarre az\'zer\'a et l'ai collée dans le formulaire.
Voilà la requête créée par phpMyAdmin :
Code :
INSERT INTO `test`.`test` (`test`) VALUES ('az\\''zer\\''a');
Ça ressemble à ma requête SELECT non ?

Et effectivement, le SELECT fonctionne avec = et pas avec LIKE, même sans le caractère générique %, ce qui transforme le LIKE en =

Bizarre !

Enlève ces antislashes ! Tu ne vas qu'au devant de problèmes ensuite pour restituer les données en affichage dans ton application.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h34   #15
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
Merci pour l'aide Cinephile.

Mon patron ma dit qu'il faut y avoir les antislashs alors je doit trouver une solution avec.

Merci encore .
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h49   #16
Membre chevronné
 
Homme Taoufiq Ben
Développeur Web
Inscription : mai 2009
Messages : 456
Détails du profil
Informations personnelles :
Nom : Homme Taoufiq Ben
Âge : 25
Localisation : Maroc

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2009
Messages : 456
Points : 639
Points : 639
J'ai trouver une solution et je crois que ça marche bien
Code :
1
2
3
4
 
SELECT * 
FROM products
WHERE REPLACE( product_name, '\\', '' ) LIKE "%az\'az\'az%"
m4riachi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 13h24   #17
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par m4riachi Voir le message
J'ai trouver une solution et je crois que ça marche bien
Code :
1
2
3
4
 
SELECT * 
FROM products
WHERE REPLACE( product_name, '\\', '' ) LIKE "%az\'az\'az%"
Avec une telle solution, adieu les index, mais de toute facon avec un LIKE '%...', il n'y a pas grand chose a faire

Citation:
Mon patron ma dit qu'il faut y avoir les antislashs alors je doit trouver une solution avec
es-tu sur que vous vous etes bien compris ? je pense qu'il parlait d'un backslash pour déspécialiser la simple quote...

@CinePhil
Citation:
Et effectivement, le SELECT fonctionne avec = et pas avec LIKE, même sans le caractère générique %, ce qui transforme le LIKE en =

Bizarre !
Je pense que la réponse est
et plus précisément :
Citation:
Because MySQL uses C escape syntax in strings (for example, “\n” to represent a newline character), you must double any “\” that you use in LIKE strings. For example, to search for “\n”, specify it as “\\n”. To search for “\”, specify it as “\\\\”; this is because the backslashes are stripped once by the parser and again when the pattern match is made, leaving a single backslash to be matched against.
ha... ce facétieux de MySQL
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h59.


 
 
 
 
Partenaires

Hébergement Web