From da5f42b3789f593cf98f2e6129500e26d4c8481d Mon Sep 17 00:00:00 2001 From: tianya Date: Mon, 28 Nov 2022 23:41:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=89=A7=E8=A1=8C=E5=B7=AE?= =?UTF-8?q?=E5=BC=82sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/admin/api.php | 16 +++++++++ src/install/index.php | 11 ++---- src/system/common.func.php | 74 ++++++++++++++++++++++++++++++++------ 3 files changed, 83 insertions(+), 18 deletions(-) diff --git a/src/admin/api.php b/src/admin/api.php index 51ed614d..66a5db58 100644 --- a/src/admin/api.php +++ b/src/admin/api.php @@ -90,6 +90,20 @@ if ($action === 'is_need_check_code') { if (!TableHasField("#@__admin", "loginerr")) { $unQueryVer[] = "6.2.0"; } + if (count($unQueryVer) > 0) { + + $upsqls = GetUpdateSQL(); + foreach ($unQueryVer as $vv) { + $ss = $upsqls[$vv]; + foreach ($ss as $s) { + if (trim($s) != '') { + $dsql->safeCheck = false; + $dsql->ExecuteNoneQuery(trim($s)); + $dsql->safeCheck = true; + } + } + } + } require_once(DEDEINC.'/libraries/dedehttpdown.class.php'); checkLogin(); @@ -265,7 +279,9 @@ if ($action === 'is_need_check_code') { $sqls = explode(";\r\n", $sql); foreach ($sqls as $sql) { if (trim($sql) != '') { + $dsql->safeCheck = false; $dsql->ExecuteNoneQuery(trim($sql)); + $dsql->safeCheck = true; } } } diff --git a/src/install/index.php b/src/install/index.php index 19ad3d52..0ee24adb 100644 --- a/src/install/index.php +++ b/src/install/index.php @@ -194,16 +194,11 @@ else if ($step==2) } $db->exec($query); } else { - if ($mysqlVersion < 4.1) + if (preg_match('#CREATE#i', $query)) { - $rs = mysql_query($query,$conn); + $rs = mysql_query(preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query),$conn); } else { - if (preg_match('#CREATE#i', $query)) - { - $rs = mysql_query(preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query),$conn); - } else { - $rs = mysql_query($query,$conn); - } + $rs = mysql_query($query,$conn); } } $query=''; diff --git a/src/system/common.func.php b/src/system/common.func.php index 83bd66f7..ff20725e 100755 --- a/src/system/common.func.php +++ b/src/system/common.func.php @@ -571,23 +571,77 @@ function AddFilter($channelid, $type=1, $fieldsnamef=array(), $defaulttid=0, $to } echo $dede_addonfields; } + /** - * 用于检测系统版本 + * 获取对应版本号的更新SQL * - * @return string + * @return array */ -function CheckDedeVer() +function GetUpdateSQL() { - global $dsql; - $ver = '1.0.0'; - $dsql->GetTableFields('#@__tagindex'); - while ($fields = $dsql->GetFieldObject()) { - if ($fields->name === 'tag_pinyin') { - $ver = '6.0.2'; + global $cfg_dbprefix,$cfg_dbtype,$cfg_db_language; + $result = array(); + $query = ''; + $sql4tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language; + $fp = fopen(DEDEROOT.'/install/update.txt','r'); + $sqls = array(); + $current_ver = ""; + while(!feof($fp)) + { + $line = rtrim(fgets($fp,1024)); + if (preg_match("/\-\- ([\d\.]+)/",$line,$matches)) { + if (count($sqls) > 0) { + $result[$current_ver] = $sqls; + } + $sqls = array(); + $current_ver = $matches[1]; } + if (preg_match("#;$#", $line)) + { + $query .= $line."\n"; + $query = str_replace('#@__',$cfg_dbprefix,$query); + if ( $cfg_dbtype == 'sqlite' ) + { + $query = preg_replace('/character set (.*?) /i','',$query); + $query = preg_replace('/unsigned/i','',$query); + $query = str_replace('TYPE=MyISAM','',$query); + $query = preg_replace ('/TINYINT\(([\d]+)\)/i','INTEGER',$query); + $query = preg_replace ('/mediumint\(([\d]+)\)/i','INTEGER',$query); + $query = preg_replace ('/smallint\(([\d]+)\)/i','INTEGER',$query); + $query = preg_replace('/int\(([\d]+)\)/i','INTEGER',$query); + $query = preg_replace('/auto_increment/i','PRIMARY KEY AUTOINCREMENT',$query); + $query = preg_replace('/,([\t\s ]+)KEY(.*?)MyISAM;/','',$query); + $query = preg_replace('/,([\t\s ]+)KEY(.*?);/',');',$query); + $query = preg_replace('/,([\t\s ]+)UNIQUE KEY(.*?);/',');',$query); + $query = preg_replace('/set\(([^\)]*?)\)/','varchar',$query); + $query = preg_replace('/enum\(([^\)]*?)\)/','varchar',$query); + if ( preg_match("/PRIMARY KEY AUTOINCREMENT/",$query) ) + { + $query = preg_replace('/,([\t\s ]+)PRIMARY KEY([\t\s ]+)\(`([0-9a-zA-Z]+)`\)/i','',$query); + } + $sqls[] = $query; + // $db->exec($query); + } else { + if (preg_match('#CREATE#i', $query)) + { + $sqls[] = preg_replace("#TYPE=MyISAM#i",$sql4tmp,$query); + } else { + $sqls[] = $query; + } + } + $query=''; + } else if (!preg_match("#^(\/\/|--)#", $line)) + { + $query .= $line; + } + } + if (count($sqls) > 0) { + $result[$current_ver] = $sqls; } - return $ver; + fclose($fp); + return $result; } + //自定义函数接口 if (file_exists(DEDEINC.'/extend.func.php')) { require_once(DEDEINC.'/extend.func.php');