2

我不明白为什么会发生这个错误。从我所见,我正确使用的函数返回了数据库中存在的数据数组。我使用 aforeach()来回显数组中的每个数据,但它给了我错误: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
            }


    ?>

那么是什么导致了这个错误呢?

谢谢

4

1 回答 1

6

我想如果你没有结果,这可能会发生。您没有$result在函数中初始化变量retrieve_posts。返回 Null,这不是在 foreach 循环中迭代的允许值。

尝试初始化变量:$result = array();在while循环之前。

编辑:查看 foreach官方 PHP 文档

foreach 构造提供了一种迭代数组的简单方法。foreach 仅适用于数组和对象

如果您尚未初始化它,则返回一个既不是对象也不是数组的空值。

于 2013-06-18T20:36:03.100 回答