SqlController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Controllers\Table;
  4. use PhpMyAdmin\Config\PageSettings;
  5. use PhpMyAdmin\DbTableExists;
  6. use PhpMyAdmin\Response;
  7. use PhpMyAdmin\SqlQueryForm;
  8. use PhpMyAdmin\Template;
  9. use PhpMyAdmin\Url;
  10. use PhpMyAdmin\Util;
  11. use function htmlspecialchars;
  12. /**
  13. * Table SQL executor
  14. */
  15. final class SqlController extends AbstractController
  16. {
  17. /** @var SqlQueryForm */
  18. private $sqlQueryForm;
  19. /**
  20. * @param Response $response
  21. * @param string $db Database name.
  22. * @param string $table Table name.
  23. */
  24. public function __construct($response, Template $template, $db, $table, SqlQueryForm $sqlQueryForm)
  25. {
  26. parent::__construct($response, $template, $db, $table);
  27. $this->sqlQueryForm = $sqlQueryForm;
  28. }
  29. public function index(): void
  30. {
  31. global $err_url, $goto, $back, $db, $table, $cfg;
  32. $this->addScriptFiles([
  33. 'makegrid.js',
  34. 'vendor/jquery/jquery.uitablefilter.js',
  35. 'vendor/stickyfill.min.js',
  36. 'sql.js',
  37. ]);
  38. $pageSettings = new PageSettings('Sql');
  39. $this->response->addHTML($pageSettings->getErrorHTML());
  40. $this->response->addHTML($pageSettings->getHTML());
  41. Util::checkParameters(['db', 'table']);
  42. $url_params = ['db' => $db, 'table' => $table];
  43. $err_url = Util::getScriptNameForOption($cfg['DefaultTabTable'], 'table');
  44. $err_url .= Url::getCommon($url_params, '&');
  45. DbTableExists::check();
  46. /**
  47. * After a syntax error, we return to this script
  48. * with the typed query in the textarea.
  49. */
  50. $goto = Url::getFromRoute('/table/sql');
  51. $back = Url::getFromRoute('/table/sql');
  52. $this->response->addHTML($this->sqlQueryForm->getHtml(
  53. $_GET['sql_query'] ?? true,
  54. false,
  55. isset($_POST['delimiter'])
  56. ? htmlspecialchars($_POST['delimiter'])
  57. : ';'
  58. ));
  59. }
  60. }