【发布时间】:2016-06-21 10:00:26
【问题描述】:
您好,我正在将 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")。
【问题讨论】:
-
您能否详细说明“似乎不起作用”,没有返回结果?
-
没错。没有错误。只是清空结果数组。第一种方式按预期返回行。只是显示的变化。
-
你试过
->setParameter('country', $country)(不带冒号) -
没有。那么我应该如何在 where() 方法中声明参数呢?有没有冒号?
-
->where("country = :country")和->setParameter('country', $country)。
标签: php sqlite symfony doctrine-orm silex