教义 DBAL 参数不起作用
Doctrine DBAL parameters not working
您好,我正在使用 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) /// <--
这些都是我在文档中找到的设置参数的示例,但是其中 none 似乎有效,但我不确定如何调试它。检查 $qb->getSQL() 和 $qb->getParams() 似乎没有显示任何有用的信息。
如果这很重要,我会使用 ("doctrine/dbal": "~2.2")
。
我偶然回到了我自己的问题,因为我很久以前就解决了它,当然结果证明这是一件愚蠢的事情。问题不在于正确构建查询,而在于正确使用它。以下是答案,以供日后参考。
使用查询生成器你不需要做:
$this->db->fetchAll($qb->getSQL());
// you get query with unfilled placeholders
而是:
$qb->execute()->fetchAll();
感谢所有试图提供帮助的人!
您好,我正在使用 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) /// <--
这些都是我在文档中找到的设置参数的示例,但是其中 none 似乎有效,但我不确定如何调试它。检查 $qb->getSQL() 和 $qb->getParams() 似乎没有显示任何有用的信息。
如果这很重要,我会使用 ("doctrine/dbal": "~2.2")
。
我偶然回到了我自己的问题,因为我很久以前就解决了它,当然结果证明这是一件愚蠢的事情。问题不在于正确构建查询,而在于正确使用它。以下是答案,以供日后参考。
使用查询生成器你不需要做:
$this->db->fetchAll($qb->getSQL());
// you get query with unfilled placeholders
而是:
$qb->execute()->fetchAll();
感谢所有试图提供帮助的人!