トランザクションで奇妙な問題に直面しています。コードは次のとおりです。
$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ステートメントが含まれているため、マルチクエリが必要です。この問題を防ぐ方法はありますか?