symfony1.0 propel1.2.1-devでのトランザクションで、ロールバックがきかない - PHPプロ!Q&A掲示板

2827

  • 0P

symfony1.0 propel1.2.1-devでのトランザクションで、ロールバックがきかない

質問日時 / 2010年7月30日 13:28 (最終編集:7月30日 15:08)    回答数 / 3件

Questioner:  officeants  このエントリーをはてなブックマークに追加 

キーワード / キーワードが設定されていません

初めて投稿させていただきます。
山岸と申します。

■環境
  symfony1.0 
  propel1.2.1-dev

表記の通りsymfonyでロールバックを試したところ、ロールバックがきかないという状態がわかりました。
どなたか、私の考えに誤りなどございましたら、ご指摘いただければ幸いです。

■参考記事
http://d.hatena.ne.jp/shimooka/20080901/1220259885
※この記事通りにはなりませんでした。

■試したこと
1.下記のコードを実行
2.Articleテーブルにデータが追加されていないことを確認
  =>ところが追加されてしまう。($con->rollback();は通ってるハズ)
  1. $con = Propel::getConnection();
  2. try{
  3.   $con->begin();
  4.   
  5.   $p = new Article();
  6.   $p->setArticleDetail('記事の詳細');
  7.   $p->save():
  8.  
  9.   $is_rollback  = true;//わざとにロールバック
  10.   if($is_rollback){
  11.     echo 'ロールバックが実行';
  12.     $con->rollback();    
  13.   }else{
  14.     $con->commit();
  15.   }
  16. }catch(Exception $e){$con->rollback();throw $e;}

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01wintermutePropelは随分いじっていない&試せる環境にないので外
┃┗A01-1officeantswintermute様 早速のご意見有り難うございました。
┗A02officeants自分で解決しました。 基本的なことでお恥ずかしい

回答一覧

並び替え:

A01
answererwintermute [7月30日 14:10]

Propelは随分いじっていない&試せる環境にないので外しているかもしれませんが

ArticlePeerか、ArticleにgetConnectionみたいな関数ありませんかね?

# よく覚えていないけど、直接Propelからコネクションを取ろうとするとsymfonyを通らないで生成してたような気がします。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerofficeants [7月30日 14:32]

wintermute様
早速のご意見有り難うございました。

コネクション
$con=Propel::getConnection();

$con=Propel::getConnection(ArticlePeer::DATABASE_NAME);
と、できるようです。
※wintermute様のお考えとちがいましたら申し訳ありません

ですが、結果は変わりませんでした。

ArticlePeer.php内部ででも
下記のように、Propel::getConnection(self::DATABASE_NAME);を呼んでいるようです。

  1. public static function retrieveByPK($pk, $con = null)
  2.   {
  3.     if ($con === null) {
  4.       $con = Propel::getConnection(self::DATABASE_NAME);
  5.     }
  6.  
  7.     $criteria = new Criteria(K2Peer::DATABASE_NAME);
  8.  
  9.     $criteria->add(K2Peer::K01, $pk);
  10.  
  11.  
  12.     $v = K2Peer::doSelect($criteria, $con);
  13.  
  14.     return !empty($v) > 0 ? $v[0] : null;
  15.   }


他、何かお気づきの点などございましたら、ご意見いただければ幸いでございます。

この意見に回答する

ツリーへ TOPへ

A02
answererofficeants [7月31日 00:53]

自分で解決しました。

基本的なことでお恥ずかしいのですが、MyIsamエンジンを使っておりました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)