public function upgrade() { $this->Purview_model->checkPurview($this->tablefunc, 'upgrade'); if ($this->input->post('action')) { $upgradesql = trim($this->input->post('upgradesql', TRUE)); if ($upgradesql) { $sqlarr = splitsql($upgradesql); foreach ($sqlarr as $sql) { $this->db->query($sql); } show_jsonmsg(array('status' => 200)); } else { show_jsonmsg(array('status' => 200, 'remsg' => lang('database_sqlerror'))); } } else { $res = array('tpl' => 'upgrade', 'tablefunc' => $this->tablefunc, 'funcstr' => $this->Purview_model->getFunc($this->tablefunc, array('upgrade'))); $this->load->view($this->tablefunc, $res); } }
function runquery($queries){//执行sql语句 global $tablepre,$whereis; $sqlquery = splitsql(str_replace(array(' cdb_', ' {tablepre}', ' `cdb_'), array(' '.$tablepre, ' '.$tablepre, ' `'.$tablepre), $queries)); $affected_rows = 0; foreach($sqlquery as $sql) { $sql = syntablestruct(trim($sql), $my_version > '4.1', $dbcharset); if(trim($sql) != '') { mysql_query(stripslashes($sql)); if($sqlerror = mysql_error()) { break; } else { $affected_rows += intval(mysql_affected_rows()); } } } if(strpos($queries,'seccodestatus') && $whereis == 'is_dz') { dz_updatecache(); } if(strpos($queries,'bbclosed') && $whereis == 'is_dz') { dz_updatecache(); } if(strpos($queries,'template') && $whereis == 'is_uch') { uch_updatecache(); } if(strpos($queries,'seccode_login') && $whereis == 'is_uch') { uch_updatecache(); } if(strpos($queries,'close') && $whereis == 'is_uch') { uch_updatecache(); } errorpage($sqlerror? $sqlerror : "数据库升级成功,影响行数: $affected_rows",'数据库升级'); if(strpos($queries,'settings') && $whereis == 'is_dz') { require_once './include/cache.func.php'; updatecache('settings'); } }
} else { flash(); } } } if (isset($_GET['do'])) { $do = trim($_GET['do']); if ($do == "refresh" && !empty($_GET['id'])) { $datafile = DATA_PATH . "backup_" . $backupdir . DS . $_GET['id']; if (!file_exists($datafile)) { flash("file_not_exists"); } else { if (@($fp = fopen($datafile, 'rb'))) { $sqldump = fread($fp, filesize($datafile)); fclose($fp); $sqlquery = splitsql($sqldump); unset($sqldump); foreach ($sqlquery as $sql) { $sql = syntablestruct(trim($sql), $db->version() > '4.1', $dbcharset); if ($sql != '') { $db->query($sql); if (($sqlerror = $db->error()) && $db->errno() != 1062) { $db->halt('MySQL Query Error', $sql); } } } flash("db_restored", "db.php?do=restore"); } else { flash(); } }
<br /><center><input class="button" type="submit" name="sqlsubmit" value="<?=$lang['submit']?>"></center> </form></td></tr> <? } } else { if($option == 'simple') { $queryselect = intval($queryselect); $queries = isset($simplequeries[$queryselect]) && $simplequeries[$queryselect]['sql'] ? $simplequeries[$queryselect]['sql'] : ''; } elseif(!$checkperm) { cpmsg('database_run_query_denied'); } $sqlquery = splitsql(str_replace(array(' cdb_', ' {tablepre}', ' `cdb_'), array(' '.$tablepre, ' '.$tablepre, ' `'.$tablepre), $queries)); $affected_rows = 0; foreach($sqlquery as $sql) { if(trim($sql) != '') { $db->query(stripslashes($sql), 'SILENT'); if($sqlerror = $db->error()) { break; } else { $affected_rows += intval($db->affected_rows()); } } } cpmsg($sqlerror ? 'database_run_query_invalid' : 'database_run_query_succeed'); }
$tablestr .= ($tablestr ? ',' : '') . $tblprefix . $table; } $tablestr && $db->query("{$dealstr} TABLE {$tablestr}"); adminlog(lang('db_tb_' . submitcheck('bdboptimize') ? 'optimize' : 'repair')); amessage('tableoperatefinish', '?entry=database&action=dboptimize'); } } elseif ($action == 'dbsql') { if (!submitcheck('bdbsql')) { url_nav(lang('dboperate'), $urlsarr, 'dbsql'); tabheader(lang('run_sql_code'), 'dbsql', '?entry=database&action=dbsql'); echo "<tr class=\"txt\"><td class=\"txtL w25B\">" . lang('im_sql_code_content') . "</td><td class=\"txtL\"><textarea rows=\"15\" name=\"sqlcode\" cols=\"100\"></textarea></td></tr>"; tabfooter('bdbsql'); a_guide('dbsql'); } else { empty($sqlcode) && amessage('inputsqlcode', '?entry=database&action=dbsql'); $sqlquery = splitsql(str_replace(array(' cms_', ' {tblprefix}', ' `cms_'), array(' ' . $tblprefix, ' ' . $tblprefix, ' `' . $tblprefix), $sqlcode)); $affected_rows = 0; foreach ($sqlquery as $sql) { if (trim($sql) != '') { $db->query(stripslashes($sql), 'SILENT'); if ($sqlerror = $db->error()) { break; } else { $affected_rows += intval($db->affected_rows()); } } } adminlog(lang('run_sql_code')); amessage('sqlresult', '?entry=database&action=dbsql', $affected_rows); } } elseif ($action == 'download' && $filename) {
function DoImport() { $this->CheckAdminPrivs('dbimport'); extract($this->Post); extract($this->Get); $readerror = 0; $datafile = ''; if($from == 'server') { $datafile = ROOT_PATH.'./'.$datafile_server; } $dbcharset = $this->DatabaseHandler->Charset; if(@$fp = fopen($datafile, 'rb')) { $sqldump = fgets($fp, 256); $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", $sqldump))); $dumpinfo = array('method' => $identify[3], 'volume' => intval($identify[4])); if($dumpinfo['method'] == 'multivol') { $sqldump .= fread($fp, filesize($datafile)); } fclose($fp); } else { if($autoimport) { clearcache(); $this->Messager('分卷数据成功导入数据库。',null); } else { $this->Messager('数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。',null); } } if($dumpinfo['method'] == 'multivol') { $sqlquery = splitsql($sqldump); unset($sqldump); $supetablepredot = strpos($supe['tablepre'], '.'); $supe['dbname'] = $supetablepredot !== FALSE ? substr($supe['tablepre'], 0, $supetablepredot) : ''; foreach($sqlquery as $sql) { $sql = syntablestruct(trim($sql), $this->DatabaseHandler->GetVersion() > '4.1', $dbcharset); if(substr($sql, 0, 11) == 'INSERT INTO') { $sqldbname = substr($sql, 12, 20); $dotpos = strpos($sqldbname, '.'); if($dotpos !== FALSE) { if(empty($supe['dbmode'])) { $sql = 'INSERT INTO `'.$supe['dbname'].'`.'.substr($sql, 13 + $dotpos); } else { } } } if($sql != '') { $this->DatabaseHandler->Query($sql, 'SKIP_ERROR'); if(($sqlerror = $this->DatabaseHandler->GetLastErrorString()) && $this->DatabaseHandler->GetLastErrorNo() != 1062) { die('MySQL Query Error'.$sql); } } } if($delunzip) { @unlink($datafile_server); } $datafile_next = preg_replace("/-($dumpinfo[volume])(\..+)$/", "-".($dumpinfo['volume'] + 1)."\\2", $datafile_server); if($dumpinfo['volume'] == 1) { $to="admin.php?mod=db&code=doimport&from=server&datafile_server=".urlencode($datafile_next)."&autoimport=yes&importsubmit=yes".(!empty($delunzip) ? '&delunzip=yes' : ''); $msg=' <form method="post" action="'.$to.'"> <br /><br /><br />分卷数据成功导入数据库,您需要自动导入本次其它的备份吗?<br /><br /><br /><br /> <input type="hidden" name="FORMHASH" value="'.FORMHASH.'"> <input class="button" type="submit" name="confirmed" value=" 确 定 "> <input class="button" type="button" value=" 取 消 " onClick="history.go(-1);"> </form><br />'; $this->Messager($msg,null); } elseif($autoimport) { $this->Messager("数据文件 #{$dumpinfo['volume']} 成功导入,程序将自动继续。", "admin.php?mod=db&code=doimport&from=server&datafile_server=".urlencode($datafile_next)."&autoimport=yes&importsubmit=yes".(!empty($delunzip) ? '&delunzip=yes' : '')); } else { clearcache(); $this->Messager('数据成功导入数据库。',null); } } elseif($dumpinfo['method'] == 'shell') { require './config.inc.php'; list($dbhost, $dbport) = explode(':', $dbhost); $query = $this->DatabaseHandler->Query("SHOW VARIABLES LIKE 'basedir'"); list(, $mysql_base) = $db->fetch_array($query, MYSQL_NUM); $mysqlbin = $mysql_base == '/' ? '' : addslashes($mysql_base).'bin/'; shell_exec($mysqlbin.'mysql -h"'.$dbhost.($dbport ? (is_numeric($dbport) ? ' -P'.$dbport : ' -S"'.$dbport.'"') : ''). '" -u"'.$dbuser.'" -p"'.$dbpw.'" "'.$dbname.'" < '.$datafile); clearcache(); $this->Messager('数据成功导入数据库。',null); } else { $this->Messager('数据文件非 天天团购 格式,无法导入。'); } }
function DoImport() { if (true !== JISHIGOU_FOUNDER) { $this->Messager("为安全起见,只有网站创始人才能执行数据恢复操作。", null); } $readerror = 0; $datafile = ''; $from = get_param('from'); $datafile_server = get_param('datafile_server'); $datafile_server = dir_safe($datafile_server); if (false == preg_match('~^\\.\\/data\\/backup\\/db\\/([\\w\\d\\-\\_]+)\\/\\1(\\-\\d+)?\\.sql$~i', $datafile_server)) { $this->Messager("文件名参数传递有误,请返回重试", null); } $autoimport = get_param('autoimport'); $supe = get_param('supe'); $delunzip = get_param('delunzip'); if ($from == 'server') { $datafile = RELATIVE_ROOT_PATH . './' . $datafile_server; } $dbcharset = $this->DatabaseHandler->Charset; if ($datafile && false != ($fp = @fopen($datafile, 'rb'))) { $sqldump = fgets($fp, 256); $identify = explode(',', base64_decode(preg_replace("/^# Identify:\\s*(\\w+).*/s", "\\1", $sqldump))); $dumpinfo = array('method' => $identify[3], 'volume' => intval($identify[4])); if ($dumpinfo['method'] == 'multivol') { $sqldump .= @fread($fp, filesize($datafile)); } fclose($fp); } else { if ($autoimport) { cache_clear(); $this->Messager('分卷数据成功导入数据库。', null); } else { $this->Messager('数据文件不存在: 可能服务器不允许上传文件或尺寸超过限制。', null); } } if ($dumpinfo['method'] == 'multivol') { $sqlquery = splitsql($sqldump); unset($sqldump); $supetablepredot = strpos($supe['tablepre'], '.'); $supe['dbname'] = $supetablepredot !== FALSE ? substr($supe['tablepre'], 0, $supetablepredot) : ''; foreach ($sqlquery as $sql) { $sql = syntablestruct(trim($sql), $this->DatabaseHandler->GetVersion() > '4.1', $dbcharset); if (substr($sql, 0, 11) == 'INSERT INTO') { $sqldbname = substr($sql, 12, 20); $dotpos = strpos($sqldbname, '.'); if ($dotpos !== FALSE) { if (empty($supe['dbmode'])) { $sql = 'INSERT INTO `' . $supe['dbname'] . '`.' . substr($sql, 13 + $dotpos); } else { } } else { $sql = 'REPLACE INTO ' . substr($sql, 11); } } if ($sql != '') { $this->DatabaseHandler->Query($sql, 'SKIP_ERROR'); if (($sqlerror = $this->DatabaseHandler->GetLastErrorString()) && $this->DatabaseHandler->GetLastErrorNo() != 1062) { die('MySQL Query Error' . $sql); } } } if ($delunzip) { @unlink($datafile_server); } $datafile_next = preg_replace("/\\-({$dumpinfo['volume']})(\\.sql)\$/i", "-" . ($dumpinfo['volume'] + 1) . "\\2", $datafile_server); if ($dumpinfo['volume'] == 1) { $to = "admin.php?mod=db&code=doimport&from=server&datafile_server=" . urlencode($datafile_next) . "&autoimport=yes&importsubmit=yes" . (!empty($delunzip) ? '&delunzip=yes' : ''); $msg = '<form method="post" action="' . $to . '"> <input type="hidden" name="FORMHASH" value="' . FORMHASH . '" /> <br /><br /><br />分卷数据成功导入数据库,您需要自动导入本次其它的备份吗?<br /><br /><br /><br /> <input class="button" type="submit" name="confirmed" value=" 确 定 "> <input class="button" type="button" value=" 取 消 " onClick="history.go(-1);"> </form><br />'; $this->Messager($msg, null); } elseif ($autoimport) { $this->Messager("数据文件 #{$dumpinfo['volume']} 成功导入,程序将自动继续。", "admin.php?mod=db&code=doimport&from=server&datafile_server=" . urlencode($datafile_next) . "&autoimport=yes&importsubmit=yes" . (!empty($delunzip) ? '&delunzip=yes' : '')); } else { cache_clear(); $this->Messager('数据成功导入数据库。', null); } } else { $this->Messager('数据文件非 JishiGou 格式,无法导入。'); } }