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

148 lines
4.6KB

  1. <?php
  2. /**
  3. * SQL命令执行器
  4. *
  5. * @version $Id: sys_sql_query.php 1 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 "执行优化表:$tablename OK";
  39. else echo "执行优化表:$tablename 失败,原因是:".$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 "优化表: {$row[0]} ok!<br>\r\n";
  52. } else {
  53. echo "优化表: {$row[0]} 失败! 原因是: ".$dsql->GetError()."<br>\r\n";
  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 "修复表:$tablename OK";
  66. else echo "修复表:$tablename 失败,原因是:".$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 "修复表: {$row[0]} ok!<br>\r\n";
  79. } else {
  80. echo "修复表: {$row[0]} 失败,原因是: ".$dsql->GetError()."<br>\r\n";
  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 "<span>删除数据表或数据库的语句不允许在这里执行</span>";
  91. exit();
  92. }
  93. //运行查询语句
  94. if (preg_match("#^select #i", $sqlquery)) {
  95. $dsql->SetQuery($sqlquery);
  96. $dsql->Execute();
  97. if ($dsql->GetTotalRow() <= 0) {
  98. echo "运行SQL:{$sqlquery},无返回记录";
  99. } else {
  100. echo "运行SQL:{$sqlquery},共有".$dsql->GetTotalRow()."条记录,最大返回100条";
  101. }
  102. $j = 0;
  103. while ($row = $dsql->GetArray()) {
  104. $j++;
  105. if ($j > 100) {
  106. break;
  107. }
  108. echo "<hr size=1 width='100%'/>";
  109. echo "记录:$j";
  110. echo "<hr size=1 width='100%'/>";
  111. foreach ($row as $k => $v) {
  112. echo "<span class='text-danger'>{$k}:</span>{$v}<br>\r\n";
  113. }
  114. }
  115. exit();
  116. }
  117. if ($querytype == 2) {
  118. //普通的SQL语句
  119. $sqlquery = str_replace("\r", "", $sqlquery);
  120. $sqls = preg_split("#;[ \t]{0,}\n#", $sqlquery);
  121. $nerrCode = "";
  122. $i = 0;
  123. foreach ($sqls as $q) {
  124. $q = trim($q);
  125. if ($q == "") {
  126. continue;
  127. }
  128. $dsql->ExecuteNoneQuery($q);
  129. $errCode = trim($dsql->GetError());
  130. if ($errCode == "") {
  131. $i++;
  132. } else {
  133. $nerrCode .= "执行:<span>$q</span>出错,错误提示:<span class='text-danger'>".$errCode."</span><br>";
  134. }
  135. }
  136. echo "成功执行{$i}个SQL语句<br><br>";
  137. echo $nerrCode;
  138. } else {
  139. $dsql->ExecuteNoneQuery($sqlquery);
  140. $nerrCode = trim($dsql->GetError());
  141. echo "成功执行1个SQL语句<br><br>";
  142. echo $nerrCode;
  143. }
  144. exit();
  145. }
  146. make_hash();
  147. include DedeInclude('templets/sys_sql_query.htm');
  148. ?>