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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Guinée

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 45
    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 chevronné 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
    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 : 59
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    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>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Guinée

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 45
    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 : 59
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    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 ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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