Doctrine DBAL参数不起作用

时间:2016-06-21 10:00:27

标签: php sqlite symfony doctrine-orm silex

您好我正在使用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-&gt; getSQL()和$ qb-&gt; getParams()似乎没有显示任何有用的内容。

如果重要,请使用("doctrine/dbal": "~2.2")

1 个答案:

答案 0 :(得分:0)

我偶然回到了我自己的问题,因为我很久以前就解决了这个问题,当然事实证明这是一个愚蠢的事情。问题不在于正确构建查询,而是以正确的方式使用它。以下是未来参考的答案。

使用Query Builder,您不会这样做:

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

而是:

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

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