2015-07-12 119 views
0

我的理解是InnoDB現在是MySQL的默認引擎。有了這些知識,我開始深入研究交易。使用PDO的交易

這裏是我迄今爲止...

try{ 
    $pdo->beginTransaction(); 
     $stmnt = $pdo->prepare ("delete from playing where uniq = :uniq"); 
     $stmnt->bindParam (':uniq',$uniq); 
     $stmnt->execute(); 

     $stmnt = $pdo->prepare ("insert into removals (playdate, time, vid) values (:playdate, :time, :vid"); 
     $stmnt->bindParam (":playdate",$playdate); 
     $stmnt->bindParam (":time", $time); 
     $stmnt->bindParam (":vid", $vid); 
     $stmnt->execute(); 

    $pdo->commit(); 

    echo "1"; // success 
    return; 
    } 
    catch (PDOException $e){ 
     $pdo->rollback(); 
     echo $e->getMessage(); 
    } 

這是由所謂的jQuery用「1」表示一個成功的結果。

如果我正確地理解了這一點,如果bot語句成功執行,它們都將被「提交」,但它會失敗,不會發生數據庫活動,並會生成一條錯誤消息,詳細描述失敗的第一條語句執行。

我真正的問題是,開始事務和提交應該駐留在try ... catch塊之內還是之外。

感謝, -dmd-

+0

我的回答沒有回答你的問題嗎? –

回答

0

對於可讀性和清潔,是的,它應該是try塊內。但它並不重要。它只是聲明瞭如果調用回滾時要提交或回滾的內容。