2016-04-06 13 views
0

Doctrineを使用して以下のクエリでmysqlテーブルを更新しようとしています。しかし、テーブルは更新されません。また、コードの下にエラーがスローされませんでした。私は全く混乱している。 getDQL()メソッドから取得したクエリを実行すると、mysqlにinproper qoutesのために更新された0行が表示されます。クエリ内の値の適切なqoutを配置した後で動作しています。このパズルを解くのに役立つ必要があります。Symfony 2 - Doctrine ORMクエリが機能しない

私はdoctrineを初めて使用しているので、私はquerybuilderクラスファイルの例を使用します。

$support = $this->createQueryBuilder('p') 
        ->update('gcns', 'g') 
        ->set("g.isActive", "0") 
        ->andWhere("g.issn='".$issn."'"); 
+0

それはあなたのコードですか?あなたはそれを後に実行しましたか? – MouradK

答えて

0

これまでにクエリを実行したことがありますか、それとも今構築していますか?あなたはこれらの線に沿って何かがそれを実行する必要があります:

$support->getQuery()->getSingleScalarResult(); 

私は直接それがinproperのqoutesのbecuase更新さ0の行を示すMySQLでは、()メソッドgetDQLから取られたクエリを実行した場合。

getDQL() DQLはSQLではないので、MySQL内部で直接実行しようとすると不適切なquotesが返されます。

$issnをクエリに連結しないでください。代わりにパラメータを使用する必要があります。

$qb = $this->createQueryBuilder() 

$support = $qb->update('gcns', 'g') 
    ->set('g.isActive', '0') 
    ->andWhere($qb->expr()->eq('g.issn', ':issn')) 
    ->setParameter('issn', $issn) 
    ->getQuery()->getSingleScalarResult() 
; 
+0

解決に感謝します。とにかく私はそれを自分で解決しました。 –

+0

@RosiEvangelinさて、連結した文字列を削除してください。 g.issn = '"。$ issn" ""を実行することは、セキュリティとパフォーマンスの両方の理由から悪いことです。 – Paulpro

関連する問題