我尝试使用内部连接从表中检索数据,以在where子句中使用参数过滤结果,我向您展示我的代码:
#[Route('/api/movies/genre/{genre}')]
public function listFiltered(Connection $db, $genre): Response
{
$query = $db->createQueryBuilder()
->select("m.*")
->from("movies", "m")
->innerJoin('m', 'movies_genres', 'mg', 'mg.movie_id = m.id')
->where('mg.genre_id =' ,$genre)
->setMaxResults(50)
->executeQuery()
->fetchAllAssociative();
dd($query);
return $this->json([
"filtered" => $query
]);
}
我从url路由传递$genre值
我的数据库结构是movies:id,rank,release_data,title movies_genres:movie_id,genre_id
我的错误是:执行查询时发生异常:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在第1行')AND(Action)LIMIT 50'附近使用的正确语法
1条答案
按热度按时间brccelvz1#
添加带有
:genre
占位符的where()
方法,并在$genre
的值上使用setParameter()
,这应该可以防止语法错误和可能的SQL注入问题:如果上面的方法不起作用,请尝试通过使用
$query->getSQL()
回显生成的SQL查询并检查其中的任何语法问题来进行调试。