2017-08-16 87 views
0

我是PHP的學習者。這個提交和回滾過程在每一行執行任務。我如何一次提交併回滾所有內容?在PHP和MySQL中使用交易

<?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,看看是否有什麼地方的$result是不正確的

它看起來像:

編輯: 破從循環中出現錯誤,因爲您不需要繼續循環到其他元素。

$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