2017-01-11 18 views
0

は私がアクティブなトランザクション

$pdo = new dbpdo(); 
    $fields = ['id','last','first']; 
    $values = [NULL,'asd','asd']; 
    //$pdo->db->beginTransaction(); 
    try { 
     $pdo->db->beginTransaction(); 
     //echo 'connected'; 
     //$pdo->InsertBatch('staff',implode(',',$data)); 
     //$pdo->InsertBatch('staff',implode(',',$fields), implode(',',$values)); 
     $pdo->InsertBatch('staff',$fields, $values); 
     //$pdo->exec("INSERT INTO staff('id','first','last') VALUES ('NULL','asd','asd')"); 
     //$pdo->execute(); 
     $pdo->commit(); 
     //$message = 'success'; 
     echo 'Save'; 
    } catch (Exception $e) { 
     //die("Unable to connect: " . $e->getMessage()); 
     $pdo->rollBack(); 
     //$message = 'sayop'; 
     //die("Unable to connect: " . $e->getMessage()); 
     echo "Failed: " . $e->getMessage(); 
    } 

私の質問はコミットとロールバックを使用コードを持って、すでに存在します。私はこれを実行します。 。と言われています。すでにアクティブなトランザクションがあり、データはデータベースに保存されていません。 。 dbpdoクラスはPDOクラスを拡張しています。

+1

'$ pdo-> InsertBatch'メソッドは新しいトランザクションを作成しようとします –

答えて

0

今日私は同じシナリオを持っていました... Firebirdにいくつかのマスターディテールレコードを挿入しようとしていましたすでにアクティブトランザクションエラーがあります。

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)

$pdo->db->beginTransaction()

を呼び出す前に、そして、あなたはあなたのトランザクションを完了すると、自動コミット再有効化:

私のソリューションは、有効にして、自動コミットオプションを無効にすることでした、これを試して

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)

参考: http://php.net/manual/pt_BR/pdo.begintransaction.php#113602

関連する問題