'Invalid parameter number: number of bound variables does not match number of tokens' 交响乐
'Invalid parameter number: number of bound variables does not match number of tokens' Symfony
我正在使用查询构建器开发symfony 项目实体。当我尝试 运行 这个函数时,我遇到了这个问题。
Invalid parameter number: number of bound variables does not match number of tokens
public function json_filterAllproductsAction() {
$search = "";
$category = 1;
//Combine tables and create the query with querybuilder
$em = $this->container->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();
$qb->select('p')
->from('EagleAdminBundle:Products', 'p')
->orderBy('p.id', 'DESC');
if ($category != 0) {
$qb->where($qb->expr()->in('p.category', '?1'))
->setParameter(1, $category);
}
$qb->where('p.productTitle LIKE :title')
->setParameter('title', "$search%");
//convert to json using "JMSSerializerBundle"
$serializer = $this->container->get('serializer');
$jsonproducts = $serializer->serialize($qb->getQuery()->getResult(), 'json');
return new Response($jsonproducts);
}
我认为错误在
$qb->where($qb->expr()->in('p.category', '?1'))
->setParameter(1, $category);
如果有人能帮助我,那就太好了。
这里有两个问题。第一个是你的最后一个 where 子句覆盖了第一个。这可以通过使用 andWhere 来解决。第二个是您将命名参数 (:title) 与位置参数 (?1) 混合在一起。混合是不行的。而且您实际上并不需要 expr 对象。尝试:
$qb->select('product')
->from('EagleAdminBundle:Products', 'product')
->orderBy('product.id', 'DESC');
if ($category) {
$qb->andWhere('product.category IN (:category)');
$qb->setParameter('category', $category);
}
$qb->andWhere('product.productTitle LIKE :title');
$qb->setParameter('title', "$search%");
我正在使用查询构建器开发symfony 项目实体。当我尝试 运行 这个函数时,我遇到了这个问题。
Invalid parameter number: number of bound variables does not match number of tokens
public function json_filterAllproductsAction() {
$search = "";
$category = 1;
//Combine tables and create the query with querybuilder
$em = $this->container->get('doctrine.orm.entity_manager');
$qb = $em->createQueryBuilder();
$qb->select('p')
->from('EagleAdminBundle:Products', 'p')
->orderBy('p.id', 'DESC');
if ($category != 0) {
$qb->where($qb->expr()->in('p.category', '?1'))
->setParameter(1, $category);
}
$qb->where('p.productTitle LIKE :title')
->setParameter('title', "$search%");
//convert to json using "JMSSerializerBundle"
$serializer = $this->container->get('serializer');
$jsonproducts = $serializer->serialize($qb->getQuery()->getResult(), 'json');
return new Response($jsonproducts);
}
我认为错误在
$qb->where($qb->expr()->in('p.category', '?1')) ->setParameter(1, $category);
如果有人能帮助我,那就太好了。
这里有两个问题。第一个是你的最后一个 where 子句覆盖了第一个。这可以通过使用 andWhere 来解决。第二个是您将命名参数 (:title) 与位置参数 (?1) 混合在一起。混合是不行的。而且您实际上并不需要 expr 对象。尝试:
$qb->select('product')
->from('EagleAdminBundle:Products', 'product')
->orderBy('product.id', 'DESC');
if ($category) {
$qb->andWhere('product.category IN (:category)');
$qb->setParameter('category', $category);
}
$qb->andWhere('product.productTitle LIKE :title');
$qb->setParameter('title', "$search%");