2014-08-29 17 views
0

MY PHP代碼mysqli transactionmysqli_transaction不工作或我misundersatnd

<?php 

/*db connection*/ 

$conn = mysqli_connect("localhost", "root", "", "test"); 

mysqli_autocommit($conn, FALSE); 

$insert1 = mysqli_query($conn, "INSERT INTO user(name,age,gender) VALUES('DEEPU', 24, 'male')"); 

$insert2 = mysqli_query($conn, "INSERT INTO user(name,age,gender2) VALUES('ANIL', 25, 'male')"); 

mysqli_commit($conn); 

mysqli_close($conn); 

?> 

我知道mysqli transaction用於,如果事務中的任何操作失敗,整個交易將失敗。

問題:

在我的代碼第二個查詢是錯誤的,它使用gender2,而不是gender。由於一個查詢失敗,整個事務將失敗。但是這裏執行第一個查詢並將數據插入到表中。我希望沒有數據會插入表中,因爲第二個查詢失敗。

我的代碼中是否有任何錯誤?或者我完全誤解了這一點。

如果我使用

mysqli_rollback($conn); 

它帶給pre-transactional狀態。我使用innoDB引擎。

我需要什麼

If both query is correct: data should insert. 

If one is correct and other is wrong: no data will insert. 

皮斯幫助...謝謝。

回答

1

mysqli_query對成功的查詢返回true。如果兩個查詢都成功,您可以使用它提交,如果兩個查詢都失敗,可以使用此提交。

$conn = mysqli_connect("localhost", "root", "", "test"); 

mysqli_autocommit($conn, FALSE); 

$query1 = "INSERT INTO user(name,age,gender) VALUES('DEEPU', 24, 'male')";  
$query2 = "INSERT INTO user(name,age,gender2) VALUES('ANIL', 25, 'male')"; 

if(mysqli_query($conn, $query1) && mysqli_query($conn, $query2)) 
{ 
    mysqli_commit($conn); 
}else 
{ 
    mysqli_rollback($conn); 
} 

mysqli_close($conn);