[RESOLU] Récupérer toutes les valeurs d'une requête dans un foreach

Eléphant du PHP | 53 Messages

23 sept. 2016, 10:26

Bonjour,

Je suis actuellement en train de travailler sur un site web / application.

Je bloque sur une partie, il s'agit de stocker les valeurs retournée par la requete dans le foreach.

J'y arrive très bien pour une seule, mais pour plusieurs ça ne fonctionne pas. Je n'obtiens que la première valeur voulue puis le stockage s'arrête. (je stocke dans $final)

Le code :
foreach ($res as $cle => $re) {
	$requete = $DATABASE->prepare('SELECT nom FROM machine WHERE id = ?');
	$requete->execute(array($re[0]));
	$final = $requete->fetchAll();
}
Mon $final contient :

array (size=1)
0 =>
array (size=2)
'nom' => string 'Volvo L120E' (length=11)
0 => string 'Volvo L120E' (length=11)

Le problème est celui que j'ai décrit au dessus du code, je ne récupère qu'une machine, or il y a deux associations entre l'id voulu et les machines. Je devrais donc trouver deux machines dans mon $final. Or il n'y en a qu'une. J'ai essayé :

$final = $final + $requete->fetchAll()

et aussi :

$final = [];
$final1 = $requete6>fetchAll();
$final = array_merge($final, $final1);

. Mais sans résultat.

Si quelqu'un peut m'aider :)
Dernière édition par tlalaguedulac le 23 sept. 2016, 11:44, édité 2 fois.

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8728 Messages

23 sept. 2016, 11:12

salut,

c'est parce que ce n'est pas la clef qu'il faut utiliser mais la clef idMachines (ou zéro) du tableau $value.
au passage ton code va écraser final pour chaque clef.
Le mieux, si tu veux tout les noms d'est d'utiliser la clause IN dans le prédicat (avec tout les id d'un coup)
je ferais ainsi.
<?php
// Le tableau de donnée entrantes, c'est ce que j'ai tiré de ton exemple, toi il faut que tu utilises $res à la place de $data dans le foreach et que tu vires $data
$data = [
    0 =>[
        'idMachines' => 3,
        0 =>'3'
    ],
    1 =>[
        'idMachines' => '2',
        0 =>'2'
    ]
];
$strID = "";
foreach ($data as $value) {
    $strID .= $value['idMachines'].',';
}

$strID = substr($strID, 0, strrpos($strID, ','));
$requete = $DATABASE->prepare('SELECT distinct nom FROM machine WHERE id in('.$strID.')');
$requete->execute();
$final = $requete->fetchAll();
Dans ce cas la requête devient :
SELECT distinct nom FROM machine WHERE id in(3,2)
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 53 Messages

23 sept. 2016, 11:17

Désolé moogli j'ai reglé mon problème maintentant j'en ai un différent :) J'ai changé legerement mon post ! Effectivement je n'utilisait pas la bonne variable dans mon execute ! Désolé je viens juste de changer le post :s !

Si tu as une solution pour la récupération !