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

PHP & Base de données Discussion :

erreur de syntaxe sur une requête très simple [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut erreur de syntaxe sur une requête très simple
    Bonjour,
    je m'arrache les cheveux depuis des heures à essayer de faire un panier,
    j'arrive au stade où je veux récupérer dans ma table produits les lignes qui correspondent au code_produit (clé primaire).
    Les 2 lignes de code qui posent problème sont les suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $id_liste=implode(',',array_keys($_SESSION['panier'])); 
     
    $sql = 'SELECT * FROM produits WHERE code_produit IN "'.$id_liste.'"';
    $id_liste est une suite de codes produits séparés par des virgules: san_han,san_sha,san_ita,san_mar

    Mysql me retourne l'erreur suivante, je ne comprends pas où est mon erreur...Si qqn pouvait m'aider ce serait sympa.

    Merci.

    Erreur lors du QUERY: SELECT * FROM produits WHERE code_produit IN "san_han,san_sha,san_ita,san_mar"!

    Erreur de syntaxe près de '"san_han,san_sha,san_ita,san_mar"' à la ligne 1

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 202
    Points : 8 428
    Points
    8 428
    Billets dans le blog
    17
    Par défaut
    Salut !

    Tu trouveras ici http://dev.mysql.com/doc/refman/5.0/...operators.html des infos quant à la syntaxe de IN.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Ok merci Séb, au départ j'avais mis des parenthèses pour le IN mais comme j'avais pas d'affichage après le fetch j'ai essayé autrement...
    Comme ça, ça devrait fonctionner

    SELECT * FROM produits WHERE code_produit IN ("$id_liste")

    Faut plus qu'j'oublie de consulter la doc avant de poser mes bêtes questions.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Je suis toujours enlisé, jai réduit le code où je cale à sa plus simple expression et $id_liste ne contient plus qu'une seule valeur:

    j'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_liste=implode(',',array_keys($_SESSION['panier']));
    à ce stade je fait un echo sur $id_liste qui vaut san_ita, puis j'écris ma requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql='SELECT * FROM produits WHERE code_produit IN ("$id_liste")';
    Cette requête si je l'entre dans phpmyadmin (en remplaçant $id_liste par sa valeur)
    me retourne bien la ligne que j'attends (visible en attachement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $requete=TraiterRequete($sql);
     
    $data=mysql_fetch_assoc($requete);		
     
    var_dump($data);
    Par contre avec php, la requête me retourne non pas une ligne de ma table mais un booléen qui vaut false,
    donc le problème vient forcément de guillemets mal placés autour de la valeur que prend $id_liste,
    j'ai déjà essayé toutes les solutions au moins 10x et je ne trouve pas.
    Donc je sollicite une x de plus votre aide...
    Images attachées Images attachées  

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 202
    Points : 8 428
    Points
    8 428
    Billets dans le blog
    17
    Par défaut
    Fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql='SELECT * FROM produits WHERE code_produit IN ("$id_liste")';
    echo $sql ;
    Pour voir.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    heu, résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM produits WHERE code_produit IN ("$id_liste")

  7. #7
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Normal, entre simple quote, il n'y as pas d'évaluation des variables si il y en a dedans ...

    C plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql="SELECT * FROM produits WHERE code_produit IN ($id_liste)";
    [edit]Mais comme $id_liste est un tableau, je pense pas que ça marchera en direct (à supprimer, c une conne... de ma part, désolé )[edit]

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    Salut Fench, Merci pour ton aide.
    Je mets tjrs mes reqêtes entre simple quotes, j'aurais encore pu chercher longtemps...
    Le fait de changer les simples quotes par des doubles quotes,
    et de les rajouter par ailleurs autour de $id_liste résout mon problème
    j'ai donc maintenant ceci et ça fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $id_liste=implode('","',array_keys($_SESSION['panier']));
    $id_liste='"'.$id_liste.'"';
    $sql="SELECT * FROM produits WHERE code_produit IN ($id_liste)";
    $requete=TraiterRequete($sql);
    while($data=mysql_fetch_assoc($requete))
    {	
        echo'Produit: '.$data['nom_produit'].' - Prix à l\'unité: '.$data['prix_produit_htva'];
    }
    Nouveau problème maintenant: mon prix est une chaine de caractères, alors que dans ma bd c'est un réel

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Après relecture du post, il me semble que cette solution peut convenir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql='SELECT * FROM produits WHERE code_produit IN (';
    // += ou avec le ., faut voir le manuel
    foreach ($_SESSION['panier'] as $key => $pann)  $sql+="'$key',";
    // Il ya la dernière virgule à virer, voir avec un substr par exemple
    $sql=substr($sql, 0, strlen($sql)-1); 
    // fin de requête
    $sql+=')';

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 42
    Points : 29
    Points
    29
    Par défaut
    ça, ça m'a l'air plus tordu comme code en tous cas il ne fonctionne pas tel qu'il est là, mais c'est pas grave j'ai ce que je voulais. Merci.

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

Discussions similaires

  1. [MySQL] Erreur sur une requête toute simple
    Par JeromeC# dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/04/2011, 22h15
  2. Requête très longue sur une table très simple
    Par kragenskul dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/06/2009, 14h28
  3. [MySQL] Erreur de syntaxe sur une requête
    Par nO_life dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 06/03/2009, 12h34
  4. Erreur de syntaxe sur une requête d'insertion
    Par Moustic74 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2008, 17h34
  5. Erreur de syntaxe sur une requête paramétrée
    Par deglingo37 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2006, 22h21

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