PHP: array wird leer nach foreach () loop - php, arrays, loops, foreach

Ich habe diese Abfrage

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

und ich muss dieses Array zweimal durchlaufen.

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

Dieser Code gibt zurück

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

In der zweiten Schleife wird das Array leer. Ich habe eine ähnliche Frage gefunden, Zwei While Loops, zweite liefert leeres Array? , aber ich habe keine ähnliche Lösung für PDO gefunden.

Ohne zwei Abfragen zweimal zu erstellen, zwei identische Arrays, wie durchlaufe ich sie zweimal?

Und ich verstehe nicht, warum es nach der ersten Schleife leert.

Antworten:

4 für die Antwort № 1

Sie müssen das Ergebnis einer Abfrage zuerst in ein Array abrufen.

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 />";
}

?>

PDO:

<?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 />";
}

?>