php symfony查询生成器中的内部连接子句问题

kyvafyod  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(89)

我尝试使用内部连接从表中检索数据,以在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'附近使用的正确语法

brccelvz

brccelvz1#

添加带有:genre占位符的where()方法,并在$genre的值上使用setParameter(),这应该可以防止语法错误和可能的SQL注入问题:

$query = $db->createQueryBuilder()
  ->select("m.*")
  ->from("movies", "m")
  ->innerJoin('m', 'movies_genres', 'mg', 'mg.movie_id = m.id')
  ->where('mg.genre_id = :genre')
  ->setParameter('genre', $genre)
  ->setMaxResults(50)
  ->executeQuery()
  ->fetchAllAssociative();

如果上面的方法不起作用,请尝试通过使用$query->getSQL()回显生成的SQL查询并检查其中的任何语法问题来进行调试。

相关问题