2014-08-29 18 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);