[英]Syntax Error: line 0, col 152: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN'
[英]Symfony 3.0 with Doctrine query builder: [Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'
我在使用查询生成器时遇到一些问题。 首先,我有这个存储库:
<?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;
}
}
我要实现的是检查是否检查用户名或电子邮件相同的用户。 这就是为什么我跑:
$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();
内部寄存器功能。 但是:
echo $e->getMessage();
返回:
[Syntax Error] line 0, col 7: Error: Expected known function, got 'WHERE'
select
语句丢失,必须准备where
语句。
将您的代码更改为:
$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();
这样,您便有了一个干净的准备好的查询。
请参阅原则QueryBuilder
文档的“为查询绑定参数”一章
编辑
您需要像下面这样使用存储库:
$repository = $em->getRepository('YourBundle:YourEntity');
$query = $repository->createQueryBuilder('p)
->select('p')
//...
或添加FROM
语句:
$query = $em->createQueryBuilder('p')
->from('YourEntityNamespace', 'p')
// ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.