我无法理解为什么会出现这种错误。从我可以看到我正确使用的函数返回数据库中存在的数据数组。我使用foreach()
来回显数组中的每个数据,但它给出了错误:Warning: Invalid argument supplied for foreach()
。
这是功能:
// Retrieve posts
function retrieve_posts(){
// start new instance of the database connection
global $dbh;
// Get all the posts
$stmt = $dbh->prepare("SELECT * FROM jacks_barbers_reviews ORDER BY date DESC");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[] = $row;
}
return $result;
}
和(简化的)foreach循环:
<?php
$posts = retrieve_posts();
foreach($posts AS $index){
echo '<div class="test-wrap">'; //contains the individual testimonials
echo '<p>' . $index['post'] . '</p>';
echo '<p style="float:right;font-style:normal;font-size:15px;">By ' .$index['name']. ' ' .$index['date']. '</p>';
echo '<div style="clear:both"></div>';
echo '</div>'; // closes test-wrap
}
?>
那是什么导致了这个错误?
由于
答案 0 :(得分:6)
我想如果你没有结果可能会发生这种情况。您没有初始化$result
函数中的retrieve_posts
变量。返回Null,这不是在foreach循环内迭代的允许值。
尝试在while循环之前初始化变量:$result = array();
。
编辑: 看看foreach official PHP docs:
foreach构造提供了一种迭代数组的简单方法。 foreach仅适用于数组和对象
如果尚未初始化它,则返回一个空值,既不是对象也不是数组。