IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Requête avec les antislash


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from products where product_name = 'az\'zer\'az'
    A la recherche d'un film : http://chercher-un-film.com

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM products WHERE product_name = 'az\\'zer\\'az'

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Je l'ai vérifier mais je n'ai aucun résultat
    A la recherche d'un film : http://chercher-un-film.com

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 89
    Points
    89
    Par défaut
    Pourquoi ne pas utiliser les doubles quotes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM products WHERE product_name = "az'zer'az"

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par apophyss Voir le message
    Pourquoi ne pas utiliser les doubles quotes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 69
    Points : 89
    Points
    89
    Par défaut
    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)...

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Citation Envoyé par apophyss Voir le message
    Pourquoi ne pas utiliser les doubles quotes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    A la recherche d'un film : http://chercher-un-film.com

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si ta donnée existante est bien celle que tu annonces dans ton premier message :
    az\'zer\'a
    Alors il faut doubler les antislashes et les apostrophes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM products 
    WHERE product_name = 'az\\''zer\\''a'
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Ç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
    A la recherche d'un film : http://chercher-un-film.com

  11. #11
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Quand je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM products 
    WHERE product_name like '%az\\''zer\\''a%'
    Ça marche plus
    A la recherche d'un film : http://chercher-un-film.com

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ç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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  13. #13
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    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.
    A la recherche d'un film : http://chercher-un-film.com

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  15. #15
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    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 .
    A la recherche d'un film : http://chercher-un-film.com

  16. #16
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    J'ai trouver une solution et je crois que ça marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM products
    WHERE REPLACE( product_name, '\\', '' ) LIKE "%az\'az\'az%"
    A la recherche d'un film : http://chercher-un-film.com

  17. #17
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par m4riachi Voir le message
    J'ai trouver une solution et je crois que ça marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

    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
    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 :
    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

  18. #18
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Août 2010
    Messages : 280
    Points : 347
    Points
    347
    Par défaut patience et longueur de temps font plus que force ni que rage?
    Concernant ce Like. C'est assez important si on veut par exemple faire une recherche dans la base de donnée d'un site web pour codeurs.

    Manifestement il s'agit aujourd'hui d'un sujet de 2011 déterré en 2015.

    J'ai trébuché sur ce même problème pendant un certain temps et j'aurais franchement laissé tomber si je n'avais pas trouvé la soluce par disons 35% de pur hasard. Autant dire que ce problème n'a jamais vraiment été résolu. Je me permets de couronner dev.net de LA solution aussi hérétique puisse-t-elle paraître. Si quelqu'un connait une autre manière de faire, merci de bien vouloir la poster, mais pour l'instant, il n'y a que celle ci qui fonctionne sous mon wampserver 2.2.

    Je laisse les codes de test au cas où les gens veulent tester.

    la colonne "description" est de type text, latin1_swedish_ci.

    Ceci fonctionne sous le phpmyadmin de cette version de wampserver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `softs` WHERE description LIKE '%antislash:\\\%'
    et en dessous de 3 antislashs, c'est loupé.

    Pour le script php,
    • en dessous de 3 antislashs, c'est loupé.
    • en dessous de 4 antislashs, c'est loupé.
    • en dessous de 5 antislashs, c'est loupé.
    • 5 antislashs, euh ça marche.


    Bon il y a surement une explication "logique", hein. Toujours est-il qu'avant que je décide de prononcer la formule magique "bonsangmaistuvasrentrercaractèredem" ça m'a coûté juste quelques petites heures. Fonctionne aussi avec quelques douzaines d'antislashs. Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$sql = "SELECT * FROM softs WHERE description LIKE '%antislash:\\\\\%'";
    	foreach ($requete->query($sql) as $row) {
    		var_dump($row['description']);
    	}
    Terminées les prises de tête pour programmer en php. On procède comme ça : http://cavril.developpez.com/php/ (débutants pressés voulant éviter d'approfondir vers la POO)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème requète avec les dates sous sql server
    Par fayabones dans le forum Développement
    Réponses: 2
    Dernier message: 04/06/2009, 22h27
  2. [2.0] Deux requêtes avec les mêmes paramètres
    Par alband85 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/07/2008, 19h28
  3. Afficher la requête avec les choix du formulaire
    Par solidaritok dans le forum Langage
    Réponses: 3
    Dernier message: 23/03/2008, 17h57
  4. [MySQL] Requête avec les dates
    Par lusitano11 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 17/01/2007, 09h50
  5. requête avec les dates
    Par Tayhair dans le forum Access
    Réponses: 2
    Dernier message: 17/03/2006, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo