参数太多:查询定义了 0 个参数,而您绑定了 1 个错误
Too many parameters: the query defines 0 parameters and you bound 1 error
我是 Symfony 的新手,我遇到了一个错误。
我在 Whosebug 上寻找解决方案,但 none 似乎适合我的问题。
错误:
“参数太多:查询定义了 0 个参数,而您绑定了 1 个”
而 运行 查询 :
class Report extends BaseEntityManager
{
use ContainerAwareTrait;
public function getPager(array $criteria, $page = 1, $limit = 5, array $sort = array()){
$parameters = array();
$query = $this->getRepository()
->createQueryBuilder('r')
->select('r, g')
->leftJoin('r.media', 'g')
->leftJoin('r.category', 'c')
->orderBy('r.id', 'ASC');
if (isset($criteria['context'])){
$query->andWhere('c.context = :contextId');
$parameters['contextId'] = $criteria['context'];
}
if(isset($criteria['category'])){
$query->andWhere('r.category = :categoryId');
$parameters['categoryId'] = $criteria['category'];
}
if(isset($criteria['author'])){
$query->andWhere('r.user = :author');
$parameters['author'] = $criteria['author'];
}
if(isset($criteria['search'])){
$query->andWhere('lower(r.title) LIKE lower(:search) OR lower(r.description) LIKE lower(:search) OR lower(r.location) LIKE lower(:search)');
$parameters['search'] = '%'.$criteria['search'].'%';
}
if(isset($criteria['status'])){
// $query->andWhere('r.status = :status');
// $parameters['status'] = $criteria['status'];
$s0= "'".$criteria['status'][0]."'";
$s1= "'".$criteria['status'][1]."'";
$s2= "'".$criteria['status'][2]."'";
$query->andWhere('r.status = '.$s0.' OR r.status = '.$s1.' OR r.status = '.$s2);
$parameters['status'] = $criteria['status'];
}
$query->setParameters($parameters);
$adapter = new DoctrineORMAdapter($query);
$pagerfanta = new Pagerfanta($adapter);
if($limit == -1){
$pagerfanta->setMaxPerPage($pagerfanta->getNbResults());
}
else{
$pagerfanta->setMaxPerPage($limit)
->setCurrentPage($page);
}
return $pagerfanta;
}
}
nevermaind 文本因为:看起来你的 post 大部分是代码;请添加更多详细信息。
nevermaind text 因为:看起来你的 post 主要是代码;请添加更多详细信息。
没有像 :status
这样的命名占位符,但在 $parameters
中,您正在从标准
传递状态值
$parameters['status'] = $criteria['status'];
此外,您直接在查询中传递状态值,这不是一个好方法,而是对状态值使用命名占位符
您还可以对状态值使用 IN()
子句
if(isset($criteria['status'])){
$query->andWhere('r.status IN(:status)');
$parameters['status'] = $criteria['status'];
}
我是 Symfony 的新手,我遇到了一个错误。 我在 Whosebug 上寻找解决方案,但 none 似乎适合我的问题。 错误: “参数太多:查询定义了 0 个参数,而您绑定了 1 个” 而 运行 查询 :
class Report extends BaseEntityManager
{
use ContainerAwareTrait;
public function getPager(array $criteria, $page = 1, $limit = 5, array $sort = array()){
$parameters = array();
$query = $this->getRepository()
->createQueryBuilder('r')
->select('r, g')
->leftJoin('r.media', 'g')
->leftJoin('r.category', 'c')
->orderBy('r.id', 'ASC');
if (isset($criteria['context'])){
$query->andWhere('c.context = :contextId');
$parameters['contextId'] = $criteria['context'];
}
if(isset($criteria['category'])){
$query->andWhere('r.category = :categoryId');
$parameters['categoryId'] = $criteria['category'];
}
if(isset($criteria['author'])){
$query->andWhere('r.user = :author');
$parameters['author'] = $criteria['author'];
}
if(isset($criteria['search'])){
$query->andWhere('lower(r.title) LIKE lower(:search) OR lower(r.description) LIKE lower(:search) OR lower(r.location) LIKE lower(:search)');
$parameters['search'] = '%'.$criteria['search'].'%';
}
if(isset($criteria['status'])){
// $query->andWhere('r.status = :status');
// $parameters['status'] = $criteria['status'];
$s0= "'".$criteria['status'][0]."'";
$s1= "'".$criteria['status'][1]."'";
$s2= "'".$criteria['status'][2]."'";
$query->andWhere('r.status = '.$s0.' OR r.status = '.$s1.' OR r.status = '.$s2);
$parameters['status'] = $criteria['status'];
}
$query->setParameters($parameters);
$adapter = new DoctrineORMAdapter($query);
$pagerfanta = new Pagerfanta($adapter);
if($limit == -1){
$pagerfanta->setMaxPerPage($pagerfanta->getNbResults());
}
else{
$pagerfanta->setMaxPerPage($limit)
->setCurrentPage($page);
}
return $pagerfanta;
}
}
nevermaind 文本因为:看起来你的 post 大部分是代码;请添加更多详细信息。 nevermaind text 因为:看起来你的 post 主要是代码;请添加更多详细信息。
没有像 :status
这样的命名占位符,但在 $parameters
中,您正在从标准
$parameters['status'] = $criteria['status'];
此外,您直接在查询中传递状态值,这不是一个好方法,而是对状态值使用命名占位符
您还可以对状态值使用 IN()
子句
if(isset($criteria['status'])){
$query->andWhere('r.status IN(:status)');
$parameters['status'] = $criteria['status'];
}