/** * 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; }