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 :

Recuperer tous les elements en utilisant mysql WHERE IN().


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 45
    Points : 36
    Points
    36
    Par défaut Recuperer tous les elements en utilisant mysql WHERE IN().
    Bonjour,

    Pourquoi ce code en bas me donne le premier element de: $_POST['identify_friend_list'] ="4688;;;4695;;;4679;;;4683;;;4694;;;4687;;;4691;;;4680;;;4684;;;440";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $q=$bdd->prepare('
     
        SELECT 
                           * 
                          FROM users U
                                LEFT JOIN blocked_users B
                                    ON ( U.id = B.id_blocker AND B.id_blocked = :id_user )
                                    OR ( U.id = B.id_blocked AND B.id_blocker = :id_user )
     
                                WHERE id IN (:bn) AND B.id_blocking IS NULL 
     
     
        ');
       $q->execute(array(
         'bn'      => $_POST['identify_friend_list'],
         'id_user' => infos_profile()->id
       ));
    Comment je pourrais recuperer tous les elements de $_POST['identify_friend_list'] ?

    Merci.

  2. #2
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Salut,
    dans l'état, tu devrais avoir une erreur sql.
    Il faut remplacer les ; par des , dans la chaîne $_POST['identify_friend_list']
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bn = str_replace($_POST['identify_friend_list'], ";", ",");
    PS:
    WHERE U.id in()... au lieu de WHERE id in()...

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Bonjour Mohamed,

    Comme tu as plusieurs lignes de résultats, il faut récupérer tout ça dans une boucle...
    Complète ton code avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $data=array();
    while($row= $q->fetch(PDO::FETCH_ASSOC)){
      //le tableau $data intègre $row a chaque tour
      $data[]=$row;
    }
    echo '<pre>';
    print_r($data);
    echo '</pre>';

  4. #4
    Invité
    Invité(e)
    Par défaut
    @Dentrite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $data=array();
    while($row= $q->fetch(PDO::FETCH_ASSOC)){
      //le tableau $data intègre $row a chaque tour
      $data[]=$row;
    }
    Autant écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = $q->fetchAll(PDO::FETCH_ASSOC);

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 45
    Points : 36
    Points
    36
    Par défaut
    j'ai ce code qui fontionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $in_array =explode(";;;", $_POST['identify_friend_list']);
     $in  = str_repeat('?,', count($in_array) - 1) . '?';
    $sql = "SELECT * FROM users WHERE id IN ($in)";
    $stm = $bdd->prepare($sql);
    $stm->execute($in_array);
    mais je n'arrive pas à lui inserer cette partie:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LEFT JOIN blocked_users B
       ON ( U.id = B.id_blocker AND B.id_blocked = ? )
       OR ( U.id = B.id_blocked AND B.id_blocker = ? )


    J'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $in_array =explode(";;;", $_POST['identify_friend_list']);
     $in  = str_repeat('?,', count($in_array) - 1) . '?';
     
    $stm = $bdd->prepare("SELECT * FROM users U
      LEFT JOIN blocked_users B
       ON ( U.id = B.id_blocker AND B.id_blocked = ? )
       OR ( U.id = B.id_blocked AND B.id_blocker = ? )
       WHERE U.id IN ($in) AND B.id_blocking IS NULL");
    $stm->execute([infos_profile()->id,$in_array]);
    Erreur:
    Notice: Array to string conversion in

    Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

    PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    @Dentrite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = $q->fetchAll(PDO::FETCH_ASSOC);
    Ah merci Jreaux. Je croyais que fetchAll renvoyait toujours 2 valeurs (numérique + associatif) et je ne veux pas de ça.

    Heu, c'est moi ou Mohamed ne nous lit tout simplement pas ? Je ne vois ni mes 3 lignes de code ni ta ligne de code dans sa dernière proposition ?

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    fetchAll renvoie la même chose fetch, mais en parcourant toutes les lignes et en construisant un tableau avec. En gros, tu vas obtenir le même résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = $q->fetchAll($flags);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $data = [];
    while ($row = $q->fetch($flags)) {
        $data[] = $row;
    }
    Le truc, c'est de mettre le bon mode de récupération.

Discussions similaires

  1. recuperer tous les elements d'une JList
    Par ejaub dans le forum Composants
    Réponses: 2
    Dernier message: 01/02/2006, 23h12
  2. Recuperer tous les fichiers du disque dur
    Par godik dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/10/2005, 20h18
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. [fichier] Recuperer tous les bit un à un
    Par hutchuck dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2005, 16h05
  5. [DOM IE]:recuperer tous les input de type checkbox
    Par sleepy2002 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/12/2004, 18h38

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