Partage
  • Partager sur Facebook
  • Partager sur Twitter

requete préparée qui renvoie obstinément du vide

Sujet résolu
    15 octobre 2020 à 19:35:39

    Bonjour, 

    j'essaie de récupérer les card_ID de la table cards qui ne sont pas dans cards_paid.

    J'ai essayé deux requêtes différentes qui, je pense, font la même chose, mais ne renvoie rien alors qu'il devrait y avoir quelque chose..

    Les voici:

    requete imbriquée

    $id_card_to_buy = $bdd->prepare("SELECT card_ID FROM cards WHERE  card_statut=:statut  AND card_type=:type AND card_niveau=:card_niveau AND card_ID NOT IN(SELECT ID_card FROM cards_paid WHERE ID_user=:ID_user)")

    et un left join

    $id_card_to_buy = $bdd->prepare("SELECT card_ID FROM cards LEFT JOIN cards_paid ON cards.card_ID = cards_paid.ID_card  WHERE cards_paid.ID_card IS NULL AND cards.card_statut=:statut AND card_niveau=:card_niveau AND cards_paid.ID_user=:ID_user");


    Merci par avance

    • Partager sur Facebook
    • Partager sur Twitter
      15 octobre 2020 à 21:15:13

      Salut !

      Comme au support premier niveau, on fait vérifier que les prises soient bien branchées, est-ce que tu as bien activé l'affichage des erreurs PHP ET de ton interface d'accès à la BDD ?

      Peux-tu nous montrer le code d'exécution de la requête ?

      • Partager sur Facebook
      • Partager sur Twitter
        15 octobre 2020 à 21:21:45

        Salut, erreurs activées et la requete  renvoie que : array()

        Voici le code complet: 

        // liste id cartes non possédée par le joueur
                        $id_card_to_buy = $bdd->prepare("SELECT card_ID FROM cards WHERE  card_statut=:statut  AND card_type=:type AND card_niveau=:card_niveau AND card_ID NOT IN(SELECT ID_card FROM cards_paid WHERE ID_user=:ID_user)");
                        $id_card_to_buy->bindValue(':statut','payant' , PDO::PARAM_STR);
                        $id_card_to_buy->bindValue(':card_niveau',$niveau_cards['arene_name_classe'] , PDO::PARAM_STR);
                        $id_card_to_buy->bindValue(':ID_user',$_SESSION['Auth']['ID'], PDO::PARAM_STR);
                        $id_card_to_buy->bindValue(':type','training' , PDO::PARAM_STR);
                        $id_card_to_buy->execute();
                        $array_card_win = array();
                        while ($card_id = $id_card_to_buy->fetch()) {
                            $array_card_win[] = $card_id['card_ID'];
                        }
                        print_r($array_card_win);
        • Partager sur Facebook
        • Partager sur Twitter
          15 octobre 2020 à 21:30:56

          As-tu tenté la requête dans phpMyAdmin ? Tout en sachant que les dernières versions permettent une simulation des requêtes préparées, la seule chose est que c'est au développeur d'échapper les valeurs dans les champs et de mettre les guillemets pour les chaînes, parce que c'est du JavaScript. Mais cela permet de voir si c'est bien un problème de code ou de requête/de données.

          D'ailleurs, je penche pour le dernier point vu que justement le retour est un tableau vide. Probablement aucun résultat à traiter, maintenant, comprendre pourquoi sans les données utilisées et sans la structure…

          Que cherches-tu à récupérer en français non technique ? Récupérer les cartes d'un certain niveau, d'un certain type et d'un certain statut pour un utilisateur donné ?
          Je suis plus familier avec la seconde manière d'écrire la requête, et je pense que les trois dernières conditions devraient être dans la clause ON, si c'est bien ça.

          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2020 à 21:37:02

            Moi aussi je suis plus familier avec le left join.

            En clair, je veux juste remonter les ID dans cards qui ne sont pas dans cards_paid (avec quelques autres conditions de niveau, type et statut mais le soucis n'est pas là).

            Mon php admin ne me permet pas d'aller direct entrer les requetes dedans malheureusement..

            Je ne peut pas mettre les conditions dans ON car dans cards_paid il n'y a que des id de card (présent dans cards) et des id user pour savoir lesquelles ont été achetées. Cards contient la liste de toutes les cartes (gratuites et payantes)

            Au pire je vais faire d'un coté tous les id, de l'autre ceux deja dans cards paid et un array_diff

            EUREKA: 

            tout simplement le soucis se trouve au niveau de card_ID dans mon while. Il suffit de faire un AS quelquechose dans la requete et tout fonctionne en changeant les noms.

            Merci pour ton aide

            -
            Edité par olympiquega 15 octobre 2020 à 22:26:45

            • Partager sur Facebook
            • Partager sur Twitter

            requete préparée qui renvoie obstinément du vide

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown