2013-08-23 171 views
0

我試圖創建一個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表達式本身(不使用預先準備的語句),那工作,但我真的希望得到這個準備工作紅色的陳述。

任何人都知道如何解決這個問題?

在此先感謝

+0

對參數使用'?'通配符,但嘗試按名稱進行設置。通常你必須使用*命名參數或序數位置參數,而不是混合兩者。也許你需要嘗試像 '$ qb-> setParameter(1,10);'? (它可能從零或從一開始計數)。我不使用Doctrine或PHP,所以這是未經測試的。 –

+0

對不起,將代碼的部分代碼複製到stackoverflow時發生了錯誤。將其更改爲兩個命名參數,但問題仍然存在。 – user2710303

回答

1

您querybuillder功能的的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