Php Mysqli交易无法正常工作

时间:2016-03-23 00:38:11

标签: php mysqli

我有这段代码,试图使用交易。

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)进行注释,则所有查询都会正确运行(更新,删除和插入)。

取消注释这些行后,数据库中没有任何反应。

我的查询是正确的并经过验证。

这段代码是否正确?我做错了什么?

感谢。

1 个答案:

答案 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 "";
}