-1

基本上我在同一个类中有 2 个方法,getMovie 和 getGenres。它们非常相似,但 One 没有返回我所期望的。

这是 getMovie 方法:

public function getMovie($argType, $arg){
        $movieQuery =  "SELECT  id,
                                rt_id,
                                imdb_id,
                                url,
                                rt_url,
                                type,
                                adult,
                                DATE_FORMAT(release_date, '%Y') AS year,
                                date_added,
                                title,
                                runtime,
                                budget,
                                revenue,
                                homepage,
                                rating,
                                tagline,
                                overview,
                                popularity,
                                image,
                                backdrop,
                                trailer
                        FROM    movies
                        WHERE   " . $argType . " = " . $arg;

        $movieResult = $this->_query($movieQuery);
        $movies = array();

        if($movieResult->fetch_array(MYSQLI_ASSOC)){
            while($m = $movieResult->fetch_array(MYSQLI_ASSOC)){
                $movies[] = array(  'title' => $m['title'],
                                    'duplicate' => $m['duplicate'],
                                    'url' => $m['url'],
                                    'rt_url' => $m['rt_url'],
                                    'release_date' => $m['release_date'],
                                    'date_added' => $m['date_added'],
                                    'type' => 'movie',
                                    'adult' => $m['adult'],
                                    'id' => $id,
                                    'rt_id' => $m['rt_id'],
                                    'imdb_id' => $m['imdb_id'],
                                    'rating' => $m['rating'],
                                    'tagline' => $m['tagline'],
                                    'overview' => $m['overview'],
                                    'popularity' => $m['popularity'],
                                    'runtime' => $m['runtime'],
                                    'budget' => $m['budget'],
                                    'revenue' => $m['revenue'],
                                    'homepage' => $m['homepage'],
                                    'image' => $m['image'],
                                    'backdrop' => $m['backdrop'],
                                    'trailer' => $m['trailer'] );
            }
            return $movies;
        }
        else{
            return false;
        }

这是 getGenres 方法:

public function getGenres($movieId = NULL){
        $genresQuery = "";
        if($movieId != NULL){
            $genresQuery = "SELECT  id,
                                    name
                            FROM    genres
                            WHERE   id = ANY (
                            SELECT  genre_id
                            FROM    movie_genres
                            WHERE   movie_id = " . $movieId . ")";
        }
        else{
            $genresQuery = "SELECT  id,
                                    name
                            FROM    genres";
        }
        $genresResult = $this->_query($genresQuery);
        $genres = array();

        if($genresResult->fetch_array(MYSQLI_ASSOC)){
            while($genre = $genresResult->fetch_array(MYSQLI_ASSOC)){
                $genres[] = array(  'id' => $genre['id'],
                                    'name' => $genre['name'] );
            }
            return $genres;
        }
        else{
            return false;
        }
    }

我是这样称呼它们的:

$mov = $movie->getMovie(2207); print_r($mov); // 输出:数组()

$gen = $movie->getGenres(2207); print_r($gen); // 输出:数组(里面的值)

这两个查询实际上都返回了预期值,但 getMovies 方法不适用于 if 语句。如果我只有 while 循环,它工作正常。

我正在使用 if 和 while,因为我听说即使没有值,while 循环有时也可以执行。有没有道理呢?如果确实有理由使用 if 语句以及 wile 循环,那么为什么它不能与 getMovies 方法一起使用?

编辑1:我尝试像这样存储数组,但这导致了与内存相关的错误:

$r = $genresResult->fetch_array(MYSQLI_ASSOC);
if($r){
            while($r){
                $genres[] = array(  'id' => $genre['id'],
                                    'name' => $genre['name'] );
            }
            return $genres;
        }
4

1 回答 1

1

我正在使用 if 和 while,因为我听说即使没有值,while 循环有时也可以执行。有没有道理呢?

不,根据php 手册mysqli_result::fetch_array 返回与获取的行相对应的字符串数组,如果结果集中没有更多行,则返回NULL 。

Null 是假的,因此不会进入 while 循环。

虽然如果你有一个 if 语句是不必要的,你可以使用它mysqli_result::$num_rows来检查查询是否返回了任何行。

if($movieResult->num_rows > 0){
    while($m = $movieResult->fetch_array(MYSQLI_ASSOC)){
    ...
    }
}
于 2012-11-19T01:34:18.180 回答