我有一张包含一大堆电影的表格,我想要回应所有这些电影。但是我的循环出了问题,所以我只是拍了第一部电影。
这是我的电影模特中的代码。
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的新手,所以我无法弄清问题所在。我赞赏任何形式的帮助。
答案 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;