国内流行的内容管理系统(CMS)多端全媒体解决方案 https://www.dedebiz.com
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

179 lines
4.7KB

  1. <?php
  2. /**
  3. * SQL命令执行器
  4. *
  5. * @version $Id: sys_sql_query.php 1 22:28 2010年7月20日Z tianya $
  6. * @package DedeCMS.Administrator
  7. * @copyright Copyright (c) 2020, DedeBIZ.COM
  8. * @license https://www.dedebiz.com/license
  9. * @link https://www.dedebiz.com
  10. */
  11. require(dirname(__FILE__)."/config.php");
  12. CheckPurview('sys_Data');
  13. if(empty($dopost)) $dopost = "";
  14. //查看表结构
  15. if($dopost=="viewinfo")
  16. {
  17. CheckCSRF();
  18. if(empty($tablename))
  19. {
  20. echo "没有指定表名!";
  21. }
  22. else
  23. {
  24. $dsql->SetQuery("SHOW CREATE TABLE ".$dsql->dbName.".".$tablename);
  25. $dsql->Execute('me');
  26. $row2 = $dsql->GetArray('me',MYSQL_BOTH);
  27. $ctinfo = $row2[1];
  28. echo "<xmp>".trim($ctinfo)."</xmp>";
  29. }
  30. exit();
  31. }
  32. //优化表
  33. else if($dopost=="opimize")
  34. {
  35. CheckCSRF();
  36. if(empty($tablename))
  37. {
  38. echo "没有指定表名!";
  39. }
  40. else
  41. {
  42. $rs = $dsql->ExecuteNoneQuery("OPTIMIZE TABLE `$tablename` ");
  43. if($rs) echo "执行优化表: $tablename OK!";
  44. else echo "执行优化表: $tablename 失败,原因是:".$dsql->GetError();
  45. }
  46. exit();
  47. }
  48. //优化全部表
  49. else if($dopost=="opimizeAll")
  50. {
  51. CheckCSRF();
  52. $dsql->SetQuery("SHOW TABLES");
  53. $dsql->Execute('t');
  54. while($row = $dsql->GetArray('t',MYSQL_BOTH))
  55. {
  56. $rs = $dsql->ExecuteNoneQuery("OPTIMIZE TABLE `{$row[0]}` ");
  57. if($rs)
  58. {
  59. echo "优化表: {$row[0]} ok!<br />\r\n";
  60. } else {
  61. echo "优化表: {$row[0]} 失败! 原因是: ".$dsql->GetError()."<br />\r\n";
  62. }
  63. }
  64. exit();
  65. }
  66. //修复表
  67. else if($dopost=="repair")
  68. {
  69. CheckCSRF();
  70. if(empty($tablename))
  71. {
  72. echo "没有指定表名!";
  73. }
  74. else
  75. {
  76. $rs = $dsql->ExecuteNoneQuery("REPAIR TABLE `$tablename` ");
  77. if($rs) echo "修复表: $tablename OK!";
  78. else echo "修复表: $tablename 失败,原因是:".$dsql->GetError();
  79. }
  80. exit();
  81. }
  82. //修复全部表
  83. else if($dopost=="repairAll")
  84. {
  85. CheckCSRF();
  86. $dsql->SetQuery("Show Tables");
  87. $dsql->Execute('t');
  88. while($row = $dsql->GetArray('t',MYSQL_BOTH))
  89. {
  90. $rs = $dsql->ExecuteNoneQuery("REPAIR TABLE `{$row[0]}` ");
  91. if($rs)
  92. {
  93. echo "修复表: {$row[0]} ok!<br />\r\n";
  94. } else {
  95. echo "修复表: {$row[0]} 失败! 原因是: ".$dsql->GetError()."<br />\r\n";
  96. }
  97. }
  98. exit();
  99. }
  100. //执行SQL语句
  101. else if($dopost=="query")
  102. {
  103. CheckCSRF();
  104. $sqlquery = trim(stripslashes($sqlquery));
  105. if(preg_match("#drop(.*)table#i", $sqlquery) || preg_match("#drop(.*)database#", $sqlquery))
  106. {
  107. echo "<span style='font-size:10pt'>删除'数据表'或'数据库'的语句不允许在这里执行。</span>";
  108. exit();
  109. }
  110. //运行查询语句
  111. if(preg_match("#^select #i", $sqlquery))
  112. {
  113. $dsql->SetQuery($sqlquery);
  114. $dsql->Execute();
  115. if($dsql->GetTotalRow()<=0)
  116. {
  117. echo "运行SQL:{$sqlquery},无返回记录!";
  118. }
  119. else
  120. {
  121. echo "运行SQL:{$sqlquery},共有".$dsql->GetTotalRow()."条记录,最大返回100条!";
  122. }
  123. $j = 0;
  124. while($row = $dsql->GetArray())
  125. {
  126. $j++;
  127. if($j > 100)
  128. {
  129. break;
  130. }
  131. echo "<hr size=1 width='100%'/>";
  132. echo "记录:$j";
  133. echo "<hr size=1 width='100%'/>";
  134. foreach($row as $k=>$v)
  135. {
  136. echo "<font color='red'>{$k}:</font>{$v}<br/>\r\n";
  137. }
  138. }
  139. exit();
  140. }
  141. if($querytype==2)
  142. {
  143. //普通的SQL语句
  144. $sqlquery = str_replace("\r","",$sqlquery);
  145. $sqls = preg_split("#;[ \t]{0,}\n#",$sqlquery);
  146. $nerrCode = ""; $i=0;
  147. foreach($sqls as $q)
  148. {
  149. $q = trim($q);
  150. if($q=="")
  151. {
  152. continue;
  153. }
  154. $dsql->ExecuteNoneQuery($q);
  155. $errCode = trim($dsql->GetError());
  156. if($errCode=="")
  157. {
  158. $i++;
  159. }
  160. else
  161. {
  162. $nerrCode .= "执行: <font color='blue'>$q</font> 出错,错误提示:<font color='red'>".$errCode."</font><br>";
  163. }
  164. }
  165. echo "成功执行{$i}个SQL语句!<br><br>";
  166. echo $nerrCode;
  167. }
  168. else
  169. {
  170. $dsql->ExecuteNoneQuery($sqlquery);
  171. $nerrCode = trim($dsql->GetError());
  172. echo "成功执行1个SQL语句!<br><br>";
  173. echo $nerrCode;
  174. }
  175. exit();
  176. }
  177. make_hash();
  178. include DedeInclude('templets/sys_sql_query.htm');