/**
  * Makes a SQL contents backup.
  *
  * @access public
  * @return object this
  */
 public function back()
 {
     $this->_sSql = "#################### Database Backup ####################\n" . '# ' . Kernel::SOFTWARE_NAME . ' ' . Kernel::SOFTWARE_VERSION . ', Build ' . Kernel::SOFTWARE_BUILD . "\r\n" . '# Database name: ' . Config::getInstance()->values['database']['name'] . "\r\n" . '# Created on ' . (new CDateTime())->get()->dateTime() . "\r\n" . "#########################################################\r\n\r\n";
     $aTables = $aColumns = $aValues = array();
     $oAllTables = Db::showTables();
     while ($aRow = $oAllTables->fetch()) {
         $aTables[] = $aRow[0];
     }
     unset($oAllTables);
     $oDb = Db::getInstance();
     // Loop through tables
     foreach ($aTables as $sTable) {
         $oResult = $oDb->query('SHOW CREATE TABLE ' . $sTable);
         $iNum = (int) $oResult->rowCount();
         if ($iNum > 0) {
             $aRow = $oResult->fetch();
             $this->_sSql .= "#\n# Table: {$sTable}\r\n#\r\n\r\n";
             $this->_sSql .= "DROP TABLE IF EXISTS {$sTable};\r\n\r\n";
             $sValue = $aRow[1];
             /*** Clean up statement ***/
             $sValue = str_replace('`', '', $sValue);
             /*** Table structure ***/
             $this->_sSql .= $sValue . ";\r\n\r\n";
             unset($aRow);
         }
         unset($oResult);
         $oResult = $oDb->query('SELECT * FROM ' . $sTable);
         $iNum = (int) $oResult->rowCount();
         if ($iNum > 0) {
             while ($aRow = $oResult->fetch()) {
                 foreach ($aRow as $sColumn => $sValue) {
                     if (!is_numeric($sColumn)) {
                         if (!is_numeric($sValue) && !empty($sValue)) {
                             $sValue = Db::getInstance()->quote($sValue);
                         }
                         $sValue = str_replace(array("\r", "\n"), array('', '\\n'), $sValue);
                         $aColumns[] = $sColumn;
                         $aValues[] = $sValue;
                     }
                 }
                 $this->_sSql .= 'INSERT INTO ' . $sTable . ' (' . implode(', ', $aColumns) . ') VALUES(\'' . implode('\', \'', $aValues) . "');\n";
                 unset($aColumns, $aValues);
             }
             $this->_sSql .= "\r\n\r\n";
             unset($aRow);
         }
         unset($oResult);
     }
     unset($oDb);
     return $this;
 }