首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询错误-Doctrine2 2/Symfony2 2

查询错误-Doctrine2 2/Symfony2 2
EN

Stack Overflow用户
提问于 2012-09-11 10:04:03
回答 2查看 12.3K关注 0票数 0

我试图执行一个简单的查询,但我不明白我的错误在哪里。请帮帮我!

这在存储库类中:

代码语言:javascript
运行
复制
public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name='.$param)
            ->getResult();
    }

我就是这样称呼它的,从控制器的行动来看:

代码语言:javascript
运行
复制
 $em = $this->getDoctrine()->getEntityManager();
 $result = $em->getRepository('EMMyFriendsBundle:Friend')
              ->searchFriends($search->getWords()); 

在这种情况下,我会得到以下错误:

代码语言:javascript
运行
复制
[Semantical Error] line 0, col 54 near 'Maria': Error: 'Maria' is not defined.
500 Internal Server Error - QueryException

我试图以这样的方式将搜索到的值放在引号中:

代码语言:javascript
运行
复制
public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name=" '.$param ' " ')
            ->getResult();
    }

但后来我得到了

代码语言:javascript
运行
复制
[Syntax Error] line 0, col 59: Error: Expected end of string, got ' " '
500 Internal Server Error - QueryException

你能告诉我如何正确地写这个查询吗?提前感谢!

编辑

我也试过这个:

代码语言:javascript
运行
复制
public function searchFriends ($param)
{
     $q = $this
        ->createQueryBuilder('f')
        ->where('f.name = :name')
        ->setParameter('name', $param)
        ->getQuery();

     return $q->getResult();
}

在这方面:

代码语言:javascript
运行
复制
 $em = $this->getDoctrine()->getEntityManager();
 $result = $em->getRepository('EMMyFriendsBundle:Friend')
              ->searchFriends($search->getWords());

而且还在工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-11 10:10:30

虽然我不会使用这种方式将参数传递给查询(请检查),但您的错误在于构建缺少点的字符串的方式。应该是这样的:

代码语言:javascript
运行
复制
public function searchFriends ($param)
    {
         return $this->getEntityManager()
            ->createQuery('SELECT f FROM EMMyFriendsBundle:Friend f WHERE f.name="'.$param.'"')
            ->getResult();
    }
票数 2
EN

Stack Overflow用户

发布于 2015-05-29 08:48:26

您需要使用文字表达式:

代码语言:javascript
运行
复制
public function searchFriends($param)
{
    $qb = $this->createQueryBuilder('f')
        ->where($qb->expr()->eq('f.name', $qb->expr()->literal($param)));

    return $qb->getQuery()->getResult();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12367282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档