0

Doctrine DBAL querybuilder オブジェクトを作成し、パラメータを設定しようとしています。(postgres db、dbal 2.3.4、ドクトリンを使用

$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 のログを確認すると、クエリが渡されていることがわかり、パラメータが必要であることがわかりますが、パラメータが渡されません。

where式自体に(準備されたステートメントを使用せずに)idを設定しようとしましたが、うまくいきました。しかし、私はこれを準備済みステートメントで機能させたいと思っています。

誰でもこれを解決する方法を知っていますか?

前もって感謝します

4

5 に答える 5

1

querybuilder 関数の setParameter 部分が間違っています。: は必要ありません。このようにすべてを 1 行にまとめて、FROM ステートメントに talbe を 1 つだけ含めることができます。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のドキュメントを参照してください。

于 2014-01-22T18:48:35.553 に答える
0

これを試して:

$qb->where('tbl_user.pkid = :userid');
$qb->setParameter(':userid', 10);

それから

 $params = $qb->getParameters();
 $stmt = $connection->prepare($qb->getSQL());
 foreach ($params as $key=>$value){
    $stmt->bindParam($key,$value);
 }

$stmt->execute();
$result = $stmt->fetchAllAssociative();
于 2020-11-05T23:08:46.167 に答える