我试图将值绑定到PHP中的查询。我已经成功完成了很多次,但由于某种原因,我的代码无效。
function get_movies($vars, $page) {
global $db;
$get_movies = $db->prepare('SELECT * FROM `movies` WHERE LOWER(genres) LIKE :genre AND `qualities` LIKE :quality AND `rating` >= :imdb_min AND `rating` <= :imdb_max AND `year` >= :year_min AND `year` <= :year_max ORDER BY id DESC');
$get_movies->bindValue(':genre', $vars['genre']);
$get_movies->bindValue(':quality', $vars['quality']);
$get_movies->bindValue(':imdb_min', $vars['imdb_min']);
$get_movies->bindValue(':imdb_max', $vars['imdb_max']);
$get_movies->bindValue(':year_min', $vars['year_min']);
$get_movies->bindValue(':year_max', $vars['year_max']);
try {
$get_movies->execute();
$movies = $get_movies->fetchAll(); // list of all movies fitting parameters
$movie_offset = ($page - 1) * VIDEOS_PER_PAGE;
$movies = array_slice($movies, $movie_offset, VIDEOS_PER_PAGE);
return $movies;
} catch (Exception $e) {
throw $e;
return false;
}
}
上面的代码不起作用。不会抛出任何异常,但会返回0结果。但是,如果我手动构建查询(例如:用$ vars ['key'替换each:key并从结果字符串中准备语句),查询将返回结果完全正常。
任何提示将非常感谢。
编辑:这是传递给$ get_movies函数的$ vars数组。
$vars = array(
'genre' => "Action",
'quality' => 1080,
'imdb_min' => 0.1,
'imdb_max' => 10.0,
'year_min' => 2000,
'year_max' => 2019
);
当我使用pdo时,这就是我查询的方式
$stmt=db_conn->prepare ("SELECT * FROM table WHERE id = ? AND name = ? AND = uptime = ?");
$stmt->bindParam (1, $firstvariable);
$stmt->bindParam (2, $secondvariable);
$stmt->bindParam (3, $thirdvariable);
$stmt->execute();
$result=$stmt->fetchAll();
它将严格地绑定到盲参数(?)
暂时尝试并忽略电影偏移和电影变量,并使用foreach
循环获取结果。
试试这个,看看。希望它能帮到你。
我设法解决了这个问题。当手动执行查询时,“LIKE比较中的字符串周围的字符被解释为指示它们之间的值是字符串。当使用”字符串周围的字符绑定值时,字符包含在值本身中。这就是为什么没有抛出异常并且查询返回0结果的原因。感谢您的帮助。