我试图创建一个Doctrine DBAL querybuilder对象并在其中设置一个参数。 (使用一个Postgres数据库,DBAL 2.3.4,学说doctrine dbal querybuilder as prepared statement
$connection = $this->_em->getConnection();
$qb = $connection->createQueryBuilder();
$qb->select('tbl_user_contract.pkid AS pkid');
$qb->from('tbl_user_contract', 'tbl_user_contract');
$qb->join('tbl_user_contract', 'tbl_user', 'tbl_user', 'tbl_user_contract.fk_user = tbl_user.pkid');
$qb->where('tbl_user.pkid = :userid');
$qb->setParameter(':userid', 10);
当我试图让这个QueryBuilder的对象,我得到以下错误的结果:
SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 0 parameters,
but prepared statement "pdo_stmt_00000002" requires 1
当我检查的Postgres日志,我看到传递的查询,我注意到它期望一个参数,但我不会得到一个参数传入。
我试图设置id表达式本身(不使用预先准备的语句),那工作,但我真的希望得到这个准备工作红色的陈述。
任何人都知道如何解决这个问题?
在此先感谢
对参数使用'?'通配符,但尝试按名称进行设置。通常你必须使用*命名参数或序数位置参数,而不是混合两者。也许你需要尝试像 '$ qb-> setParameter(1,10);'? (它可能从零或从一开始计数)。我不使用Doctrine或PHP,所以这是未经测试的。 –
对不起,将代码的部分代码复制到stackoverflow时发生了错误。将其更改为两个命名参数,但问题仍然存在。 – user2710303