From 3200cf2c3c290fffc5790754e5b65b24e135d7e8 Mon Sep 17 00:00:00 2001 From: Martin Ambrus Date: Fri, 27 Oct 2017 19:34:19 +0200 Subject: [PATCH] fix: multi_query doesn't block next queries anymore --- GameEngine/Automation.php | 66 ++++++++++++++++++++------------------- GameEngine/Database.php | 23 ++++++++------ login.php | 4 +++ 3 files changed, 52 insertions(+), 41 deletions(-) diff --git a/GameEngine/Automation.php b/GameEngine/Automation.php index c7c0903a..679ae102 100755 --- a/GameEngine/Automation.php +++ b/GameEngine/Automation.php @@ -4733,7 +4733,7 @@ $wallimg = "regenerateOasisUnits($ids, true); } } @@ -5306,37 +5306,39 @@ $wallimg = "dblink->multi_query($str); + + // fetch results of the multi-query in order to allow subsequent query() and multi_query() calls to work + while (mysqli_more_results($this->dblink) && mysqli_next_result($this->dblink)) {;} + if (!$result) { return false; } - + return true; } @@ -3885,8 +3889,11 @@ class MYSQLi_DB implements IDbConnection { $str = file_get_contents($autoprefix."var/db/struct.sql"); $str = preg_replace("'%PREFIX%'", TB_PREFIX, $str); $result = $this->dblink->multi_query($str); + + // fetch results of the multi-query in order to allow subsequent query() and multi_query() calls to work + while (mysqli_more_results($this->dblink) && mysqli_next_result($this->dblink)) {;} + if (!$result) { - echo mysqli_error($this->dblink); exit; return false; } } catch (\Exception $e) { @@ -3921,14 +3928,12 @@ class MYSQLi_DB implements IDbConnection { $str = file_get_contents($autoprefix."var/db/datagen-world-data.sql"); $str = preg_replace(["'%PREFIX%'", "'%WORLDSIZE%'"], [TB_PREFIX, WORLD_MAX], $str); $result = $this->dblink->multi_query($str); + + // fetch results of the multi-query in order to allow subsequent query() and multi_query() calls to work + while (mysqli_more_results($this->dblink) && mysqli_next_result($this->dblink)) {;} + if (!$result) { return -1; - } else { - // we need to flush the result of our previous multi_query - // or the next multi_query in regenerateOasisUnits() will cause - // a "Commands out of sync; you can't run this command now" error - // more info: https://stackoverflow.com/a/27926561/467164 - while (mysqli_next_result($this->dblink)) {;} } $result = $this->regenerateOasisUnits(-1); diff --git a/login.php b/login.php index fd094e33..8f65027f 100644 --- a/login.php +++ b/login.php @@ -10,6 +10,10 @@ ## ## ################################################################################# +if(!file_exists('var/installed')) { + header("Location: install/"); + exit; +} error_reporting(E_ALL); include("GameEngine/Account.php");