Florian Schaal
2015-01-13 cc2d7b297c8b8755c4cdf5ea2a13c390f51c23d1
server/lib/classes/db_mysql.inc.php
@@ -86,7 +86,7 @@
         $this->_sqlerror('Zugriff auf Datenbankserver fehlgeschlagen! / Database server not accessible!');
         return false;
      }
      if(!((bool)mysqli_query( $this->_iConnId, "USE $this->dbName"))) {
      if(!((bool)mysqli_query( $this->_iConnId, 'USE `' . $this->dbName . '`'))) {
         $this->close();
         $this->_sqlerror('Datenbank nicht gefunden / Database not found');
         return false;
@@ -176,6 +176,7 @@
   private function _query($sQuery = '') {
      global $app;
      //if($this->isConnected == false) return false;
      if ($sQuery == '') {
         $this->_sqlerror('Keine Anfrage angegeben / No query given');
         return false;
@@ -187,6 +188,17 @@
         $ok = mysqli_ping($this->_iConnId);
         if(!$ok) {
            if(!mysqli_connect($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName)) {
               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->_sqlerror('DB::query -> reconnect');
                  return false;
@@ -269,11 +281,11 @@
   }
   public function queryOne($sQuery = '') {
      return $this->query_one($sQuery);
      return call_user_func_array(array(&$this, 'queryOneRecord'), func_get_args());
   }
   public function query_one($sQuery = '') {
      return $this->queryOneRecord($sQuery);
      return call_user_func_array(array(&$this, 'queryOneRecord'), func_get_args());
   }
   /**
@@ -302,11 +314,11 @@
   }
   public function queryAll($sQuery = '') {
      return $this->queryAllRecords($sQuery);
      return call_user_func_array(array(&$this, 'queryAllRecords'), func_get_args());
   }
   public function query_all($sQuery = '') {
      return $this->queryAllRecords($sQuery);
      return call_user_func_array(array(&$this, 'queryAllRecords'), func_get_args());
   }
   /**
@@ -335,7 +347,7 @@
   }
   public function query_all_array($sQuery = '') {
      return $this->queryAllArray($sQuery);
      return call_user_func_array(array(&$this, 'queryAllArray'), func_get_args());
   }
@@ -378,6 +390,35 @@
   /**
    * check if a utf8 string is valid
    *
    * @access public
    * @param string  $string the string to check
    * @return bool true if it is valid utf8, false otherwise
    */
   private function check_utf8($str) {
      $len = strlen($str);
      for($i = 0; $i < $len; $i++){
         $c = ord($str[$i]);
         if ($c > 128) {
            if (($c > 247)) return false;
            elseif ($c > 239) $bytes = 4;
            elseif ($c > 223) $bytes = 3;
            elseif ($c > 191) $bytes = 2;
            else return false;
            if (($i + $bytes) > $len) return false;
            while ($bytes > 1) {
               $i++;
               $b = ord($str[$i]);
               if ($b < 128 || $b > 191) return false;
               $bytes--;
            }
         }
      }
      return true;
   } // end of check_utf8
   /**
    * Escape a string for usage in a query
    *
    * @access public
@@ -388,21 +429,21 @@
      global $app;
      if(!is_string($sString) && !is_numeric($sString)) {
         $app->log('NON-String given in escape function! (' . gettype($sString) . ')', LOGLEVEL_INFO);
         $sAddMsg = getDebugBacktrace();
         //$sAddMsg = getDebugBacktrace();
         $app->log($sAddMsg, LOGLEVEL_DEBUG);
         $sString = '';
      }
      /*$cur_encoding = mb_detect_encoding($sString);
      $cur_encoding = mb_detect_encoding($sString);
      if($cur_encoding != "UTF-8") {
         if($cur_encoding != 'ASCII') {
            $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_WARN);
            $app->log('String ' . substr($sString, 0, 25) . '... is ' . $cur_encoding . '.', LOGLEVEL_INFO);
            if($cur_encoding) $sString = mb_convert_encoding($sString, 'UTF-8', $cur_encoding);
            else $sString = mb_convert_encoding($sString, 'UTF-8');
         }
      } elseif(!PXBase::check_utf8($sString)) {
      } elseif(!$this->check_utf8($sString)) {
         $sString = utf8_encode($sString);
      }*/
      }
      if($this->_iConnId) return mysqli_real_escape_string($this->_iConnId, $sString);
      else return addslashes($sString);
@@ -419,12 +460,12 @@
      $mysql_error = (is_object($this->_iConnId) ? mysqli_error($this->_iConnId) : mysqli_connect_error());
      $mysql_errno = (is_object($this->_iConnId) ? mysqli_errno($this->_iConnId) : mysqli_connect_errno());
      $sAddMsg .= getDebugBacktrace();
      //$sAddMsg .= getDebugBacktrace();
      if($this->show_error_messages && $conf['demo_mode'] === false) {
         echo $sErrormsg . $sAddMsg;
      } else if(is_object($app) && method_exists($app, 'log')) {
            $app->log($sErrormsg . $sAddMsg, LOGLEVEL_WARN);
            $app->log($sErrormsg . $sAddMsg . ' -> ' . $mysql_errno . ' (' . $mysql_error . ')', LOGLEVEL_WARN);
         }
   }