J'essaie donc de créer un site Web de téléchargement d'images et je souhaite accéder à une table mysql en utilisant une requête. Maintenant, je souhaite stocker tous les tableaux obtenus à partir de ces requêtes dans un seul tableau. Je souhaite ensuite accéder à tous les éléments de ce tableau. Comment dois-je le faire?

Voici ce que j'ai essayé:

$allimages = array();

$sql="SELECT uploaderId FROM foostable WHERE foo='bar'";//a query which fetches the image uploader's id from the foostable ..you don't need to worry about this part just know that this query returns more than one uploaderIds
$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_assoc($result)){

    $uploaderId=$row['uploaderId'];

    $sql1="SELECT uploader FROM imagestable WHERE uploaderId='$uploaderId' ORDER BY datetime DESC";
    $result1=mysqli_query($conn, $sql1);
    $row1=mysqli_fetch_assoc($result1);     

    $allimages=$allimages+$row1;

}

foreach ($allimages as $ai) {
    echo $ai['uploader'];
}

Lorsque j'exécute ce code, j'obtiens l'erreur suivante:

Warning: Illegal string offset 'uploader' in...

Je fais définitivement quelque chose de mal mais je ne suis pas en mesure de comprendre ce que c'est.

J'ai cherché partout pour cela mais je ne suis pas en mesure de le trouver donc j'ai posté cette question! Je suis vraiment nouveau dans ce domaine et toute aide serait vraiment très appréciée! Je vous remercie! :)

0
meagler 26 janv. 2017 à 18:22

4 réponses

Meilleure réponse

Vous ajoutez de nouveaux éléments à votre tableau dans le mauvais sens.

Changement

$allimages=$allimages+$row1;

À

$allimages[] = $row1; // Short for array_push($allimages, $row1)

En savoir plus sur array_push() dans le manuel

2
Magnus Eriksson 26 janv. 2017 à 15:35

Vous devriez juste pouvoir faire:

$allImages[] = $row1;

Cela devrait simplement pousser le nouveau tableau à la fin du tableau allImages chaque fois que la boucle s'exécute.

0
Anoxy 26 janv. 2017 à 15:35

Vous pouvez écrire une seule requête pour obtenir les résultats souhaités. Veuillez essayer le code suivant:

$allimages = array();
$sql    =   "SELECT i.uploader, i.datetime 
                FROM imagestable i INNER JOIN foostable f
                     ON i.uploaderId = f.uploaderId
                    AND f.foo = 'bar'
                ORDER BY i.datetime DESC";

$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_assoc($result)){
    $allimages[] = $row['uploader'];
}

print_r($allimages);
1
Dhruv Saxena 26 janv. 2017 à 15:41
SELECT i.uploader
  FROM foostable f
  JOIN imagestable i
    ON i.uploaderid = f.uploaderId 
 WHERE f.foo = 'bar'
 ORDER 
    BY i.datetime DESC
1
Strawberry 26 janv. 2017 à 15:39