while循环和foreach循环不能像预期的mvc应用程序一样工作

时间:2014-02-12 10:06:02

标签: php foreach while-loop

我有一张包含一大堆电影的表格,我想要回应所有这些电影。但是我的循环出了问题,所以我只是拍了第一部电影。

这是我的电影模特中的代码。

public function getMovieList() {
        $test = new DbConnection();
        $dbh = $test->dbcon('localhost', 'root', '6662257', 'mvc');

        $sql = $dbh->prepare("SELECT * FROM movies ORDER BY movie_id");
        $sql->execute();

        while($row = $sql->fetch()){    
            $title = $row['movie_title'];
            $description = $row['movie_des'];
            $link = $row['movie_link'];

        return array(
        $title => new Movie($title, $description, $link) 
        );

        }
    }

这是我的movielist中的代码:

echo '<h1>Movies of 2014</h1>';
    foreach ($movies as $title => $movie) {
        echo '<div class="content"><a href="index.php?movie='.$movie->title.'">'.$movie->title.'</a><br/>'.$movie->description.'</div>';
    }

它仍然只是回应我的数据库中的第一部电影。我是MVC的新手,所以我无法弄清问题所在。我赞赏任何形式的帮助。

3 个答案:

答案 0 :(得分:2)

你只是从while循环的第一次迭代返回,考虑填充数组并返回:

    $movies = array();
    while($row = $sql->fetch()){    
        $title = $row['movie_title'];
        $description = $row['movie_des'];
        $link = $row['movie_link'];

        $movies[] = new Movie($title, $description, $link);
    }
    return $movies;

答案 1 :(得分:1)

您在循环中使用return。这将导致函数结束,因此只返回查询中的第一部电影。

提取出类似的东西,你会很高兴。

public function getMovieList() {
    $test = new DbConnection();
    $dbh = $test->dbcon('localhost', 'root', '6662257', 'mvc');

    $sql = $dbh->prepare("SELECT * FROM movies ORDER BY movie_id");
    $sql->execute();

    $movies = array();

    while($row = $sql->fetch()){    
        $title = $row['movie_title'];
        $description = $row['movie_des'];
        $link = $row['movie_link'];
        $movies[$title] = new Movie($title, $description, $link);
    }

    return $movies;
}

答案 2 :(得分:1)

你必须是新功能,而不是MVC:)

函数只有一个返回值。

for ($i = 0; $i<1000; $i++) {
    return $i;
}

将在第一次迭代时返回,函数将停止。

您需要返回数组并使用循环来迭代函数

while (condition) {
    $movie[$title] = new Movie($title, $description, $link)
}
return $movie;