国内流行的内容管理系统(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.

149 lines
5.1KB

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