我在交易中遇到了一个奇怪的问题,这是代码:
$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 语句。有什么办法可以防止这个问题吗?