From ebd0e986ed11f2a34fb58cdd33efbfab192083ad Mon Sep 17 00:00:00 2001
From: Till Brehm <tbrehm@ispconfig.org>
Date: Fri, 22 Apr 2016 05:26:17 -0400
Subject: [PATCH] Added PHP 7 check in installer and updater.

---
 server/lib/classes/db_mysql.inc.php |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index f5ce39c..6d42847 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -101,8 +101,8 @@
     }
 	*/
 		if(mysqli_connect_error()) {
-			$this->errorNumber = mysqli_connect_errno();
-			$this->errorMessage = mysqli_connect_error();
+			$this->errorNumber = $this->connect_errno;
+			$this->errorMessage = $this->connect_error;
 		} else {
 			$this->errorNumber = mysqli_errno($this);
 			$this->errorMessage = mysqli_error($this);
@@ -130,6 +130,8 @@
 	}
 
 	public function query($queryString) {
+		global $app;
+		
 		if($this->isConnected == false) return false;
 		$try = 0;
 		do {
@@ -137,8 +139,19 @@
 			$ok = $this->ping();
 			if(!$ok) {
 				if(!$this->real_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
+					$this->updateError('DB::query -> reconnect');
+					if($this->errorNumber == '111') {
+						// server is not available
+						if($try > 9) {
+							if(isset($app) && isset($app->forceErrorExit)) {
+								$app->forceErrorExit('Database connection failure!');
+							}
+							// if we reach this, the app object is missing or has no exit method, so we continue as normal
+						}
+						sleep(30); // additional seconds, please!
+					}
+
 					if($try > 9) {
-						$this->updateError('DB::query -> reconnect');
 						return false;
 					} else {
 						sleep(($try > 7 ? 5 : 1));
@@ -150,7 +163,7 @@
 			}
 		} while($ok == false);
 		$this->queryId = parent::query($queryString);
-		$this->updateError('DB::query('.$queryString.') -> mysqli_query');
+		 if(!$this->queryId) $this->updateError('DB::query('.$queryString.') -> mysqli_query');
 		if(!$this->queryId) {
 			return false;
 		}
@@ -184,9 +197,9 @@
 	// returns the next record in an array
 	public function nextRecord() {
 		$this->record = $this->queryId->fetch_assoc();
-		$this->updateError('DB::nextRecord()-> mysql_fetch_array');
 		if(!$this->record || !is_array($this->record))
 		{
+			$this->updateError('DB::nextRecord()-> mysql_fetch_array');
 			return false;
 		}
 		$this->currentRow++;

--
Gitblit v1.9.1