简体   繁体   English

具有Doctrine查询生成器的Symfony 3.0:[语法错误]行0,列7:错误:预期的已知函数,得到了“ WHERE”

[英]Symfony 3.0 with Doctrine query builder: [Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'

I have some issues using query builder. 我在使用查询生成器时遇到一些问题。 First things first I have this repository: 首先,我有这个存储库:

<?php
namespace AppBundle\Entity;

use AppBundle\Entity\Product;
use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
  public function register($username,$password,$email)
  {
    //A Generic return Object
    $status=array('status'=>true,'data'=>"");

    if(empty($username))
    {
      $status['status']=-1;
      $status['data']='Username not given';
      return $status;
    }

    if(empty($password))
    {
      $status['status']=-1;
      $status['data']='Password not given';
      return $status;
    }

    if(empty($email))
    {
      $status['status']=-1;
      $status['data']='Email not given';
      return $status;
    }

    $token=md5(uniqid(gethostname(),true));

    try
    {


      $user=new Users();

      $user->setUsername($username)
            ->setPassword($password)
            ->setEmail($email)
            //->setActivated(false)
            ->setToken($token);

      $em=$this->getEntityManager();

      $tmp_user=$user->getUsername();
      $tmp_mail=$user->getEmail();
      $query=$em->createQueryBuilder('p')
                ->where('p.username=?',$tmp_user)
                ->orWhere('p.email=?',$tmp_mail)
                ->getQuery();

      $user=$query->getResult();
      var_dump($user);
      if(!empty($user))
      {
        $em->persist($user);

        $em->flush();
        $status['status']=true;
      }
      else
      {
        $result['data'] = -1;
        $result['status'] = "User exists";
      }

    }
    catch (\Exception $e)
    {
        echo $e->getMessage();
        $result['data'] = $e->getMessage(); // The exact message of the exception thrown during INSERT
        $status['status']=false;
    }


    return $status;
  }

}

What I want to achieve is to check if to check if there are any users with the same username or email. 我要实现的是检查是否检查用户名或电子邮件相同的用户。 That's why I run: 这就是为什么我跑:

  $tmp_user=$user->getUsername();
  $tmp_mail=$user->getEmail();
  $query=$em->createQueryBuilder('p')
            ->where('p.username=?',$tmp_user)
            ->orWhere('p.email=?',$tmp_mail)
            ->getQuery();

  $user=$query->getResult();

Inside the register function. 内部寄存器功能。 But the: 但是:

    echo $e->getMessage();

Returns: 返回:

[Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'

The select statement is missing, and your where statements must be prepared. select语句丢失,必须准备where语句。

Change your code to : 将您的代码更改为:

$query = $em->createQueryBuilder('p')
    ->select('p')
    ->where('p.username = :username')
    ->orWhere('p.email = :email')
    ->setParameter('username', $tmp_user)
    ->setParameter('email', $tmp_mail)
    ->getQuery();

$user = $query->getResult();

Like this, you have a clean prepared query. 这样,您便有了一个干净的准备好的查询。

See the "Bind parameters to your query" chapter of doctrine QueryBuilder documentation 请参阅原则QueryBuilder文档的“为查询绑定参数”一章

EDIT 编辑

You need to use the repository like follows : 您需要像下面这样使用存储库:

$repository = $em->getRepository('YourBundle:YourEntity');
$query = $repository->createQueryBuilder('p)
    ->select('p')
    //...

Or add a FROM statement : 或添加FROM语句:

$query = $em->createQueryBuilder('p')
    ->from('YourEntityNamespace', 'p')
    // ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 语法错误:第 0 行,第 152 列:错误:预期 =、&lt;、&lt;=、&lt;&gt;、&gt;、&gt;=、、=、得到 'BETWEEN' - Syntax Error: line 0, col 152: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN' 语法错误行0,列349:错误:预期字面量,为&#39;aS&#39; - Syntax Error line 0, col 349: Error: Expected Literal, got 'aS' 语法错误第 0 行,第 73 列:错误:预期 =、<、<=、<>、>、>=、,=、得到“AND” - Syntax Error line 0, col 73: Error: Expected =, <, <=, <>, >, >=, !=, got 'AND' Doctrine Query Builder语法错误 - Doctrine Query Builder syntax error Symfony Doctrine 预期已知 function,得到“JSON_GET_TEXT” - Symfony Doctrine Expected known function, got 'JSON_GET_TEXT' 尝试检索布尔值时出现的错误-行0,列111:错误:预期的字符串结尾,得到了“ 1” - Doctrine Error on attempting to retrieve a boolean value - line 0, col 111: Error: Expected end of string, got '1' 语法错误:第 0 行,第 72 列:错误:预期的字符串结尾,得到 'b6f037' - Syntax Error: line 0, col 72: Error: Expected end of string, got 'b6f037' Doctrine2错误“预期的已知函数,得到'COUNT'”在order by子句中 - Doctrine2 error “Expected known function, got 'COUNT'” when in order by clause Symfony主义QueryException预期字面量,为“ WHERE” - Symfony Doctrine QueryException Expected Literal, got 'WHERE' Symfony query =&gt;错误:预期的文字,得到&#39;“&#39; - Symfony query => Error: Expected Literal, got '"'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM