我有这段代码,试图使用交易。
try
{
$mysqli->autocommit(FALSE); // Line (1)
$queries = $query_delete_atividades . $query_insert_atividades . "SET NAMES 'utf8';" . $query_anuncio;
if ($mysqli->multi_query($queries) === TRUE) {
$resultado = '[{ "resultado" : "ok"}]';
return $resultado;
} else {
return "";
}
$mysqli->autocommit(TRUE); // Line (2)
mysqli_commit($mysqli); // Line (3)
$query_error = mysqli_error($mysqli);
if (strlen($query_error) == 0)
{
$resultado = '[{ "resultado" : "ok"}]';
return $resultado;
}
}
catch (Exception $e)
{
mysqli_rollback($mysqli); // Line (4)
}
在变量$ queries中,我有三种类型的查询:
如果我对行(1),(2),(3)和(4)进行注释,则所有查询都会正确运行(更新,删除和插入)。
取消注释这些行后,数据库中没有任何反应。
我的查询是正确的并经过验证。
这段代码是否正确?我做错了什么?
感谢。
答案 0 :(得分:0)
在返回return
commit
逻辑,否则交易将无法使用您使用的代码
if ($mysqli->multi_query($queries) === TRUE) {
$resultado = '[{ "resultado" : "ok"}]';
return $resultado;
} else {
return "";
}
在执行此代码之后,您将控制从try块返回到上一个函数,以便继续使用事务you need to change commit position
的代码,如下所示:
if ($mysqli->multi_query($queries) === TRUE) {
$resultado = '[{ "resultado" : "ok"}]';
mysqli_commit($mysqli); // Line (3)
/* commit internally sets auto commit to true so $mysqli->autocommit(TRUE); // Line (2) not required */
return $resultado;
} else {
return "";
}