基本上我在同一个类中有两个方法,getMovie和getGenres。它们非常相似,但一个人没有回复我的期望。
这是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); // output:Array()
$ gen = $ movie-> getGenres(2207); 的print_r($根); // output:Array(里面的值)
两个查询实际上都返回了预期值,但getMovies方法不能与if语句一起使用。如果我只有while循环它工作正常。
我正在使用if和我听到的那样虽然循环有时可以执行,即使没有值。有没有道理呢?如果确实有理由使用if语句和wile循环那么为什么它不能用于getMovies方法?
编辑1:我尝试像这样存储数组,但这导致了与内存相关的错误:
$r = $genresResult->fetch_array(MYSQLI_ASSOC);
if($r){
while($r){
$genres[] = array( 'id' => $genre['id'],
'name' => $genre['name'] );
}
return $genres;
}
答案 0 :(得分:1)
我正在使用if和我听到的那样虽然循环有时可以执行,即使没有值。这有什么道理吗?
不,根据the php manual mysqli_result :: fetch_array返回一个对应于获取行的字符串数组,如果结果集中没有更多行,则返回 NULL 。
Null是假的,因此不会输入while循环。
虽然如果你有一个if语句是必需的,你可以使用mysqli_result::$num_rows
检查查询是否返回任何行。
if($movieResult->num_rows > 0){
while($m = $movieResult->fetch_array(MYSQLI_ASSOC)){
...
}
}