2016-05-04 18 views
-1

私はPHPでのトランザクションに次のコードを使用しています。しかし、いくつかの照会はコミットされ、いくつかはコミットされません。PHPのmysqlトランザクションとtryキャッチエラー処理

私は完全なMySQLのPHPトランザクション処理コードが必要です。

try { 
    require_once './DB/dbConnect.php'; 
    $conn->autocommit(FALSE); 
    $sql = "DELETE FROM `grn_items` WHERE grn_no ='" . $Doc . "'"; 
    $result = $conn->query($sql); 

    if (!$result) { 
     $result->free(); 
     return $conn->error; 
     //throw new Exception($conn->error); 
    } 
    $sq3 = "UPDATE `grn` SET `editBy` = '" . $editBy . "' ,grnAmount ='" .    
    $total . "' WHERE grnNo ='" . $Doc . "'"; 
    $result3 = $conn->query($sq3); 

    if (!$result3) { 
     $result3->free(); 
     return $conn->error; 
     //throw new Exception($conn->error); 
    } 
    $conn->commit(); 
    $conn->autocommit(TRUE); 
    $conn->close(); 
    return "success"; 
} catch (Exception $ex) { 
    $conn->rollback(); 
    $conn->autocommit(TRUE); 
    return $ex; 
} 
+1

_私はMySQLのPHPトランザクション処理コードを必要としています。私はEl Gordoに勝つために宝くじ番号が必要です。もしそれらを持っていれば、あなたのコードを書き換えます。 _私に公正な取引をする_ – RiggsFolly

+0

@RiggsFollyうーん、stackoverflowは時々ユーモラスなことができるか分からなかった。 :) – user1735921

+0

地球上の誰かUpvotedこの質問。 http://stackoverflow.com/help/why-voteこの質問はUVを保証するものではありません。 – RiggsFolly

答えて

1

次の行

require_once './DB/dbConnect.php'; 

は外tryおよびcatchする必要がありますので、あなたの変数$connはそこから来ているので、それは

require_once './DB/dbConnect.php'; 
try { 

    $conn->autocommit(FALSE); 
    $sql = "DELETE FROM `grn_items` WHERE grn_no ='" . $Doc . "'"; 
    $result = $conn->query($sql); 

    if (!$result) { 
     $result->free(); 
     return $conn->error; 
     //throw new Exception($conn->error); 
    } 
    $sq3 = "UPDATE `grn` SET `editBy` = '" . $editBy . "' ,grnAmount ='" .    
    $total . "' WHERE grnNo ='" . $Doc . "'"; 
    $result3 = $conn->query($sq3); 

    if (!$result3) { 
     $result3->free(); 
     return $conn->error; 
     //throw new Exception($conn->error); 
    } 
    $conn->commit(); 
    $conn->autocommit(TRUE); 
    $conn->close(); 
    return "success"; 
} catch (Exception $ex) { 
    $conn->rollback(); 
    $conn->autocommit(TRUE); 
    return $ex; 
} 

でなければなりません。

+1

なぜこれで違いが生じるのだろうと思っています。 – RiggsFolly

+0

$ connはdbConnect.phpで定義されています。tryで例外が発生した場合、$ connは定義されていないためエラーになります。 – user1735921

+0

'dbConnect'で例外がスローされた場合、コードは' catch() 'にまっすぐジャンプし、NO SQL CODE **または他のコードはまったく実行されません** ___FACEPALM___ – RiggsFolly

関連する問題