Php mysql-如何检查和回滚mysql查询
我有一个关于mySql查询的问题,我使用PHP进行查询- 在我的代码中,我将数据插入表-main\u查询。如果插入部分需要,我会执行第二次插入查询-子查询 如果第二个插入查询失败,如何取消第一个插入查询?我的意思是-在我实际执行它们之前,是否可以发送两个查询以进行检查?或者-是否可以对第一个“main_query”查询执行回滚Php mysql-如何检查和回滚mysql查询,php,mysql,mysqli,transactions,Php,Mysql,Mysqli,Transactions,我有一个关于mySql查询的问题,我使用PHP进行查询- 在我的代码中,我将数据插入表-main\u查询。如果插入部分需要,我会执行第二次插入查询-子查询 如果第二个插入查询失败,如何取消第一个插入查询?我的意思是-在我实际执行它们之前,是否可以发送两个查询以进行检查?或者-是否可以对第一个“main_query”查询执行回滚 在这种情况下,您需要使用和: 或者我们可以使用面向对象的样式,如: # start mysql transaction $mysqli->begin_transac
在这种情况下,您需要使用和: 或者我们可以使用面向对象的样式,如:
# start mysql transaction
$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
$main_query = "INSERT INTO table_1 (...) VALUES (...)";
$res = $mysqli->query($main_query);
if ($res)
{
$id = $mysqli->insert_id;
$sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here
$res = $mysqli->query($sub_query);
if ($res) {
# both inserts succeed - do commit
$mysqli->commit();
}
else {
# second insert fail - do rollback
$mysqli->rollback();
}
} else {
# first insert fail - do rollback
$mysqli->rollback();
}
看看这里的工作示例Hi Slava-您是指
$mysqli->begin\u事务(mysqli\u TRANS\u START\u READ\u)代码>?还有-什么是$link
?是我的$conn
?对不起,我的错$链接到相同的$conn中。您可以使用面向对象的样式$mysqli->begin\u事务(mysqli\u TRANS\u START\u只读)代码>或功能样式mysqli\u开始\u事务($conn,mysqli\u TRANS\u START\u READ\u ONLY)
也可以,但在您的示例中,我是否能够取回$id值<代码>$id=mysqli\u insert\u id($conn)
并将其用于第二个查询?我得到以下错误:无法在只读事务中执行语句
。您确定MYSQLI\u TRANS\u START\u READ\u仅
?
# start mysql transaction
mysqli_begin_transaction($conn, MYSQLI_TRANS_START_READ_WRITE);
$main_query = "INSERT INTO table_1 (...) VALUES (...)";
$res = mysqli_query($conn, $main_query);
if ($res)
{
$id = mysqli_insert_id($conn);
$sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here
$res = mysqli_query($conn, $sub_query);
if ($res) {
# both inserts succeed - do commit
mysqli_commit($conn);
}
else {
# second insert fail - do rollback
mysqli_rollback($conn);
}
} else {
# first insert fail - do rollback
mysqli_rollback($conn);
}
# start mysql transaction
$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);
$main_query = "INSERT INTO table_1 (...) VALUES (...)";
$res = $mysqli->query($main_query);
if ($res)
{
$id = $mysqli->insert_id;
$sub_query = "INSERT INTO table_2 (...) VALUES (...)"; // use var "id" here
$res = $mysqli->query($sub_query);
if ($res) {
# both inserts succeed - do commit
$mysqli->commit();
}
else {
# second insert fail - do rollback
$mysqli->rollback();
}
} else {
# first insert fail - do rollback
$mysqli->rollback();
}