2013-08-23 5 views
0

Doctrine DBAL querybuilder 개체를 만들고 매개 변수를 설정하려고합니다. 나는 다음과 같은 오류가이 querybuilder 객체의 결과를 얻을 때 (포스트 그레스 DB, dbal 2.3.4, 교리doctrine dbal querybuilder 준비 문으로

$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); 

를 사용하여 :

SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 0 parameters, 
but prepared statement "pdo_stmt_00000002" requires 1 

은 내가 포스트 그레스 로그를 확인하면 , 내가 통과하는 쿼리를보고 매개 변수를 기대하는 통지하지만 전달 된 매개 변수를 가져 오지 않습니다.

나는 (준비된 문을 사용하지 않고) where 식에서 id를 설정하려고 시도했지만 하지만 저는 이것을 prepa로 작동시키고 싶습니다. 빨간색 진술.

누구든지이 문제를 어떻게 해결할 수 있는지 알고 있습니까? 사전

+0

매개 변수에 '?'와일드 카드를 사용하지만 이름으로 설정하려고합니다. 일반적으로 * 명명 된 매개 변수 또는 서수 위치 매개 변수 중 하나를 사용해야하며 둘을 섞어서는 안됩니다. 아마도 여러분은 '$ qb-> setParameter (1, 10);'같은 것을 시도 할 필요가있을 것입니다. (0 또는 1에서 계산할 수 있음). 나는 Doctrine이나 PHP를 사용하지 않기 때문에 이것은 테스트되지 않았다. –

+0

실례합니다. stackoverflow 코드의 일부를 복사하여 붙여 넣을 때 문제가 발생했습니다. 이름이 지정된 두 매개 변수로 변경되었지만 문제는 여전히 발생합니다. – user2710303

답변

1

당신의 querybuillder 기능의 setParameter를 부분이 잘못 그냥 적어도 그 교리의 도움으로 작동

$qb->setParameter('userid', 10); 

setparameter 명령에서 콜론을 제거 할 필요가 있다고 생각 . 당신은 다음과 같이 필요하지 않습니다 : 당신은 이것을 한 줄에 모두 넣고 FROM 문장에 하나의 talbe만을 포함시킬 수 있습니다. tbl_user라는 다른 테이블이 있고 주석이 올바른지 확인하기 위해 엔티티 정의를 확인해야하는 경우 JOIN 또는 FROM 문에 문제가있을 수 있습니다.

$connection = $this->_em->getConnection(); 
$qb = $connection->createQueryBuilder(); 
$qb->select('tbl_user_contract.pkid AS pkid') 
    ->from('tbl_user_contract') 
    ->join('tbl_user_contract', 'tbl_user', 'tbl_user', 'tbl_user_contract.fk_user = tbl_user.pkid') 
    ->where('tbl_user.pkid = :userid') 
    ->setParameter('userid', 10); 

여기의 문서 http://docs.doctrine-project.org/en/latest/reference/query-builder.html#binding-parameters-to-your-query을 참조하십시오.

관련 문제