我正在寻找的是交易。@tmuguet 的回答当时确实帮助了我,但现在从时间的角度来看,我想提供一个更新的答案。
每个查询都需要单独执行并使用准备好的语句来防止 SQL 注入。
try {
// Start transaction
$mysqli->begin_transaction();
$mysqli->query('INSERT INTO `table` VALUES (1,2,3)');
$stmt = $mysqli->prepare('UPDATE otherTable SET val1=1 WHERE id=?');
$stmt->bind_param('s', $idOfInsert);
$stmt->execute();
// Commit changes
$mysqli->commit();
} catch (\Throwable $e) {
// Something went wrong. Rollback
$mysqli->rollback();
throw $e;
}
当然,要使其正常工作,您需要启用 mysqli 错误报告。只需new mysqli()
在您的代码中添加此行。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);