1

我在交易中遇到了一个奇怪的问题,这是代码:

$mysqli = $this->getMysqli();
    //Avoid Autocommitting
    $mysqli->autocommit(FALSE);       
    $mysqli->begin_transaction();

    $insertStatment = $mysqli->prepare('INSERT INTO '.$this->table.' (name, applied_at) VALUES (?, NOW())');
    try
    {    
        $mysqli->multi_query($sql);
        $insertStatment->bind_param('s', $name);
        $insertStatment->execute();
        $insertStatment->close();
        $mysqli->commit();
        $mysqli->close();
        return TRUE;
    }
    catch (Exception $e)
    {
      $mysqli->rollBack();
      return $e->getMessage(); 
    }

$insertStatement 被 commit() 完全忽略。如果我评论这一行:

$mysqli->multi_query($sql);

它完美地工作,混合准备好的语句和multi_query时有什么问题吗?我需要多重查询,因为该$sql变量包含多个;分隔的 sql 语句。有什么办法可以防止这个问题吗?

4

0 回答 0