PHP: tablica staje się pusta po pętli foreach () - php, tablice, pętle, foreach
Mam to zapytanie
$categories = $dbh->query(" SELECT * FROM categories ORDER BY name ASC ");
i muszę zapętlić dwa razy w tej tablicy.
foreach($categories as $category) {
dd($category);
}
echo "---------------";
foreach($categories as $category) {
dd($category);
}
Ten kod zwraca
stdClass Object
(
[id] => 24
[name] => granchi
[slug] => granchi
)
stdClass Object
(
[id] => 26
[name] => molluschi
[slug] => molluschi
)
stdClass Object
(
[id] => 25
[name] => pesci
[slug] => pesci
)
---------------
W drugiej pętli tablica staje się pusta. Znalazłem podobne pytanie, Two While Loops, Second Returns Empty Array? , ale nie znalazłem podobnego rozwiązania dla PDO.
Bez dwukrotnego wysyłania zapytań, tworząc dwie identyczne tablice, w jaki sposób przechodzę przez nie dwukrotnie?
I nie rozumiem, dlaczego opróżnia się po pierwszej pętli.
Odpowiedzi:
4 dla odpowiedzi № 1Najpierw musisz pobrać wynik zapytania do tablicy.
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 />";
}
?>
CHNP:
<?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 />";
}
?>
Powiązane pytania
Najbardziej popularny
Najpopularniejsze C
Najbardziej popularna JAVA
Najpopularniejszy PHP