2017-08-16 14 views
0

私はPHPの学習者です。このコミットおよびロールバックプロセスは、各行でタスクを実行します。一度にコミットしてロールバックするにはどうすればよいですか?PHPとMySQLでのトランザクションの使用

あなたは私がどこか $resultが、それは次のようになります真

がないかどうかを確認するために$boolを使用し、ループの外にコミットする必要が

<?php 
$con = mysql_connect('localhost','user', 'abcdefg'); 
if(!con) 
{ 
    echo "Can't connect to db."; 
}else { 
    mysql_select_db('test'); 
} 

if(!file_exits('test.csv') 
{ 
    echo "Can't find the file."; 
} 

$ar_1 = file('test.csv', FILE_IGNORE_NEW_LINES); 

foreach ($ar_1 as $ar1) 
{ 
    $test = explode(",", $ar1); 
    $sql = "SELECT * FROM DB WHERE CD = '$test[0]'"; 
    $result = mysql_query_($sql); 
    $sql = "INSERT INTO DB(CODE) VALUES ('$test[0]');"; 
    $result = mysql_query($sql); 
    if($result === true) 
    { 
     //Commit 
     $sql = "commit"; 
     mysql_query($sql); 
     echo "Committed"; 
    }else { 
     //Rollback 
     $sql = "rollback"; 
     mysql_query($sql); 
     echo "Rollback"; 
    } 
} 
mysql_close($con); 
?> 
+0

あなたはすべてのエラーを取得するのですか?はいの場合はここでそれを述べた.. – Priyank

+0

ループのコミットとロールバックを移動すると、あなたはforeachでコミットしている! –

+0

私はエラーは発生しませんでしたが、毎回コミットしてロールバックする必要がありました。 – Manish

答えて

0

編集: 破壊他の要素へのループを続ける必要がないので、何かが間違っているときにループから削除することができます。

$bool = 1; 
     foreach ($ar_1 as $ar1) 
     { 
     $test = explode(",", $ar1); 

     $sql = "SELECT * FROM DB WHERE CD = '$test[0]'"; 
     $result = mysql_query_($sql); 

     $sql = "INSERT INTO DB(CODE) VALUES ('$test[0]');"; 
     $result = mysql_query($sql); 

     if($result === false) 
     { 

      //Rollback 
      $bool = 0; 
      $sql = "rollback"; 
      mysql_query($sql); 
      echo "Rollback"; 
      break; 
     } 

    } 
    if($bool == 1) 
    { 
     //Commit 
     $sql = "commit"; 
     mysql_query($sql); 
     echo "Committed"; 
    } 
    mysql_close($con); 
+0

ありがとうございます。私を助けてくれました。 – Manish

+0

@Manishここには良いコードがあります。また、正しい答えとして投票することを検討してください。 –

+0

私は感謝したいと思います。コードの上にもう一度感謝します。 – Manish

関連する問題