原则DBAL参数不起作用

康拉德

嗨,我将PHP Silex与Doctrine DBAL查询生成器(无ORM)和SQLite结合使用。它可以正常工作,因此我可以构建查询并返回结果,但是我一生无法获得设置参数(我一直都得到空数组)。

这是有效的方法:

$qb->select('*')
            ->from('photos')
            ->where("country = '".$country."'")
            ->andWhere('status = 1')
            ->orderBy($sort[0], $sort[1])
            ->setFirstResult($start)
            ->setMaxResults($limit)

出于明显的原因,我想替换为:

$qb->select('*')
            ->from('photos')
            ->where("country = ?") /// <--
            ->andWhere('status = 1')
            ->orderBy($sort[0], $sort[1])
            ->setFirstResult($start)
            ->setMaxResults($limit)
            ->setParameter(0, $country) /// <--

或者:

$qb->select('*')
            ->from('photos')
            ->where("country = :country") /// <--
            ->andWhere('status = 1')
            ->orderBy($sort[0], $sort[1])
            ->setFirstResult($start)
            ->setMaxResults($limit)
            ->setParameter(':country', $country) /// <--

甚至:

$qb = $this->db->createQueryBuilder(); 
$expr = $qb->expr();
$qb->select('*')
            ->from('photos')
            ->where($qb->expr()->andX(
                $qb->expr()->eq('country', '?1'), /// <--
                $qb->expr()->eq('status', 1)
            ))
            ->orderBy($sort[0], $sort[1])
            ->setFirstResult($start)
            ->setMaxResults($limit)
            ->setParameter(1, $country) /// <--

这些都是我在文档中找到的设置参数的示例,但是它们似乎都不起作用,我不确定如何调试它。检查$ qb-> getSQL()和$ qb-> getParams()似乎没有显示任何有用的东西。

我正在使用,("doctrine/dbal": "~2.2")如果有关系。

康拉德

我很早就解决了我自己的问题,因为我很久以前解决了这个问题,但是事实证明这是一件愚蠢的事情。问题在于没有正确构建查询,而是正确使用了查询。这是供将来参考的答案。

使用查询生成器,您无需执行以下操作:

$this->db->fetchAll($qb->getSQL()); 
// you get query with unfilled placeholders

反而:

$qb->execute()->fetchAll();

感谢所有尝试提供帮助的人!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章