Php 带数组值的DBAL setParameter()

Php 带数组值的DBAL setParameter(),php,mysql,symfony,doctrine,dbal,Php,Mysql,Symfony,Doctrine,Dbal,我使用的是doctrine DBAL,由于queryBuilder的缘故,我对SQL查询有一些问题 $builder = $this->getConnection()->getQueryBuilder(); $builder->select(['id','name','type']) ->from('table') ->where('id='.(int)$value) ->setMaxResults(1);

我使用的是doctrine DBAL,由于queryBuilder的缘故,我对SQL查询有一些问题

$builder = $this->getConnection()->getQueryBuilder();
$builder->select(['id','name','type'])
         ->from('table')
         ->where('id='.(int)$value)
         ->setMaxResults(1);
$builder->andWhere($builder->expr()->in('type', ['first','second']));

echo(builder->getSQL());

$data = $builder->execute()->fetchRow();
并获取SQL

SELECT id, name, type FROM table WHERE (id=149) AND (type IN (first,second)) LIMIT 1
这就是问题所在,我需要将(type-IN(first,second))编码为字符串,比如(type-IN('first','second'))

如何使用查询生成器以正确的方式执行此操作?

尝试使用

$builder->andWhere('type IN (:string)');
$builder->setParameter('string', array('first','second'), \Doctrine\DBAL\Connection::PARAM_STR_ARRAY);

谢谢,第二个带有\Doctrine\DBAL\Connection::PARAM_STR_数组的变体非常适合我!第一种情况不起作用,因为dbal不在没有参数类型的数组中包装字符串。@SergeyNikolaev你是对的,但我无法测试它,所以我写了一个答案,尝试更改数组定义并指定参数类型。希望尚未完成的操作将有助于填补这些漏洞。我花了六个小时在谷歌上搜索才找到这个答案。