2016-05-23 51 views
3

問題を表示するために、以下のコードを作成しました。 はい、私はそれがすべて教義であるべきであり、PDOを使用することによってそれは教義の事柄をまったく無意味にするという事実に感謝します。DoctrineとPDOで同じ結果が得られない

さらに重要なことに、私は2つが一致しない理由を理解しようとしています。

基本的に、最初のPDOクエリには、70行カウントと140最大IDが返されます。 2番目のPDOクエリは、同じ70行カウントと140最大IDを返します。 問題は、2つの間の教義の挿入が71と141になったということです。

なぜ、2番目のPDOクエリノートにこれが反映されていますか?

別のPHPページまたはWorkbenchでクエリを実行すると、71/141を返します。実行中のページ内にはありません。

$userID = $enUser->getId(); 
$stmt1 = $this->pdoConnection->getConnection()->prepare(' 
    SELECT COUNT(UT.ID) AS UTC, 
      MAX(UT.ID) AS UTMID 
    FROM UserThing UT 
    WHERE UT.User_ID = :userID; 
') or die (implode(':', $stmt1->errorInfo())); 

$stmt1->bindParam(':userID', $userID, \PDO::PARAM_INT, 11); 
$results = $this->pdoConnection->dbRecSet($stmt1, false); 
$stmt1->closeCursor(); 
unset($stmt1); 
var_dump($results); 

$newUserThing = new UserThing(); 
$newUserThing->setUserThingThings($enThing); 
$newUserThing->setUserThingUsers($enUser); 
$newUserThing->setAttainedDate(new \DateTime()); 
$this->em->persist($newUserThing); 
$this->em->flush(); 
$userThingID = $newUserThing->getId(); 

echo $userThingID; 

$stmt2 = $this->pdoConnection->getConnection()->prepare(' 
    SELECT COUNT(UT.ID) AS UTC, 
      MAX(UT.ID) AS UTMID 
    FROM UserThing UT 
    WHERE UT.User_ID = :userID; 
') or die (implode(':', $stmt2->errorInfo())); 
$stmt2->bindParam(':userID', $userID, \PDO::PARAM_INT, 11); 
$results = $this->pdoConnection->dbRecSet($stmt2, false); 
$stmt2->closeCursor(); 
unset($stmt2); 
var_dump($results); 

Doctrineが新しく挿入されたIDを返すことはできますが、2番目のPDOクエリがDBの変更を反映しない理由はありますか?

+0

私はこれを再現しようとしましたが、できませんでした。あなたは 'WHERE UT.User_ID =:userID;'とは何の関係もないと確信していますか? – mickadoo

+1

私は問題を解決しました。しかし、あなたはあなた自身の質問に答えることができる前に、X時間を待たなければなりません。うまくいけば私が知ったことは他の人を助けるだろう。それを調べてくれてありがとう! – Adi

答えて

0

私のPDOクラスがSymfonyと異なる接続文字列を使用していたことが、この投稿を作成する際に私には出なかったビットです。

単一のクエリから返される複数のレコードセットをサポートできるように、私のクラスではデフォルトとは異なるドライバオプションが使用されていました。だから私はクラスをSymfonyに移植して使用したところ、長い間うまくいきました。

つまり、1つの接続で挿入/更新を実行し、別の接続でまっすぐに読んでもうまくいきません。それが私がここで見つけた問題です。

SymfonyのPDOドライバオプションについてのドキュメントは少し欠けています。それに直面しているすべての人にとって、PDO定数はYMLでInteger同等物を必要とするだけです。 だから、あなたのアプリケーション/設定/ config.ymlでこのようなもので終わる:

options: 
    20: true 
    3: 1 
    1002: "SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'" 

私は私が必要とそれを正しく行う何をすることができました。

関連する問題