diff options
-rw-r--r-- | src/server/game/World/World.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index da625cb5625..cd7d6cc3edd 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2787,19 +2787,21 @@ BanReturn World::BanCharacter(std::string const& name, std::string const& durati } else guid = banned->GetGUID().GetCounter(); - + //Use transaction in order to ensure the order of the queries + SQLTransaction trans = CharacterDatabase.BeginTransaction(); // make sure there is only one active ban PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHARACTER_BAN); stmt->setUInt32(0, guid); - CharacterDatabase.Execute(stmt); + trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_BAN); stmt->setUInt32(0, guid); stmt->setUInt32(1, duration_secs); stmt->setString(2, author); stmt->setString(3, reason); - CharacterDatabase.Execute(stmt); - + trans->Append(stmt); + CharacterDatabase.CommitTransaction(trans); + if (banned) banned->GetSession()->KickPlayer(); |