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

Langage PHP Discussion :

Select et IN () erreur


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut Select et IN () erreur
    Bonjour,

    Jai mon select bloque avec IN.

    $iddelacarte est de la forme 599,711,712,713
    et
    $sous_menu est de la forme Musée,Monument - Site Historique

    si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SELECT * FROM bonsplans  WHERE  id IN (".$iddelacarte.") ", $link);
    ca fonctionne bien mais des que je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SELECT * FROM bonsplans  WHERE  id IN (".$iddelacarte.") AND type IN (".$sous_menu.")", $link);
    j'ai le message suivant :
    Type de cette erreur: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�e,Monument - Site Historique) ' at line 1
    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    $sous_menu contient des chaînes de caractères qui ne sont pas entourés de quotes simples.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Effectivement maintenant c'est ok mais j'ai eu un peu de mal a trouver comment ajouter des quotes simples.

    J'ai utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    setlocale(LC_CTYPE, "en_US.UTF-8");
    $value1=(escapeshellarg($value));
    J'ai du ajoute la premiere ligne car autrment escapeshellarg supprimait tous les caracteres accentues.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Quand transgohan t'a dit pour les quotes simples, je pense qu'il ne pensait pas à ton code mais alors pas du tout.
    Cela devait être plus dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = 'Musée,Monument - Site Historique';
    $data = implode(',', array_map(function($p) { return "'".trim($p)."'"; }, explode(',', $str)));
    $result = mysql_query("SELECT * FROM bonsplans  WHERE  id IN (".$iddelacarte.") AND type IN (".$data.")", $link);
    escapeshellarg() n'est sert pas du tout à quoter des données destinées à une base.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Bonjour rawsrc,

    Je ne comprends pas ton code, mais pourquoi tu dis que escapeshellarg n'est pas correct.

    avant ma variable etait comme cela : Musée,Monument - Site Historique

    et avec escapeshellarg elle devient : 'Musée,Monument' - 'Site Historique'

    et de cette facon cela fonctionne tres bien

  6. #6
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    Sauf que un bon échappement c'est ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Musée','Monument - Site Historique'
    escapeshellarg n'est pas faite pour échapper des paramètres de requête SQL, c'est pour les paramètres de ligne de commande.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par voyageurdumonde Voir le message
    Je ne comprends pas ton code
    Voici la version non condensée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    $str   = 'Musée,Monument - Site Historique';
    $parts = explode(',', $str);  // on scinde la chaine sur chaque virgule
    $data  = array();
    foreach($parts as $value) {
       // ici on ajoute les guillemets simples et on supprime d'éventuels espaces
       $data[] = "'".trim($value)."'";
    }
    $sql_in = implode(', ', $data); // ici on transforme le tableau en chaine avec une virgule pour séparateur
     
    $result = mysql_query("SELECT * FROM bonsplans  WHERE  id IN (".$iddelacarte.") AND type IN (".$sql_in.")", $link);
     
    ?>

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

Discussions similaires

  1. [AC-2007] Regroupement de 2 Select Case MsgBox = erreur Type 13
    Par Bernard67 dans le forum VBA Access
    Réponses: 18
    Dernier message: 13/02/2012, 14h12
  2. [MySQL] SELECT WHERE IN erreur
    Par voyageurdumonde dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 17/12/2010, 04h07
  3. [AC-97] Select, gestion d'erreur et Alter d'une table liée
    Par Jay.L dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/02/2007, 14h31
  4. [ASP][SQL]Erreur lors d'un select
    Par DEC dans le forum ASP
    Réponses: 12
    Dernier message: 08/06/2004, 17h54
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h51

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