PHP: array devient vide après foreach () loop - php, tableaux, boucles, foreach

J'ai cette requête

$categories = $dbh->query(" SELECT * FROM categories ORDER BY name ASC ");

et je dois boucler deux fois sur ce tableau.

foreach($categories as $category) {
dd($category);
}
echo "---------------";
foreach($categories as $category) {
dd($category);
}

Ce code renvoie

stdClass Object
(
[id] => 24
[name] => granchi
[slug] => granchi
)
stdClass Object
(
[id] => 26
[name] => molluschi
[slug] => molluschi
)
stdClass Object
(
[id] => 25
[name] => pesci
[slug] => pesci
)
---------------

Dans la deuxième boucle, le tableau devient vide. J'ai trouvé une question similaire, Deux boucles While, deuxième renvoie un tableau vide? , mais je n'ai pas trouvé une solution similaire pour PDO.

Sans interroger deux fois en créant deux tableaux identiques, comment les parcourir deux fois?

Et je ne comprends pas pourquoi il se vide après la première boucle.

Réponses:

4 pour la réponse № 1

Vous devez d'abord récupérer le résultat d'une requête dans un tableau.

Mysqli:

<?php

$db = new mysqli("localhost", "root", "", "test");

if($db->connect_errno > 0){
die("Unable to connect to database [" . $db->connect_error . "]");
}

$sql = " SELECT * FROM categories ORDER BY name ASC ";

if(!$result = $db->query($sql)){
die("There was an error running the query [" . $db->error . "]");
}

while($row = $result->fetch_assoc()){
echo $row["**column name**"] . "<br />";
}

?>

AOP:

<?php

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "");

$sql = "SELECT * FROM categories ORDER BY name ASC ";

try {
$stmt = $db->query($sql);
} catch(PDOException $ex) {
echo "An Error occured!";
}

$result = $stmt->fetch(PDO::FETCH_ASSOC);

foreach($result as $key => $val)
{
echo $key." - ".$val."<br />";
}

?>

Menu