MultiTableQuery.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Handles DB Multi-table query
  5. *
  6. * @package PhpMyAdmin
  7. */
  8. declare(strict_types=1);
  9. namespace PhpMyAdmin\Database;
  10. use PhpMyAdmin\DatabaseInterface;
  11. use PhpMyAdmin\ParseAnalyze;
  12. use PhpMyAdmin\Sql;
  13. use PhpMyAdmin\Template;
  14. /**
  15. * Class to handle database Multi-table querying
  16. *
  17. * @package PhpMyAdmin
  18. */
  19. class MultiTableQuery
  20. {
  21. /**
  22. * DatabaseInterface instance
  23. *
  24. * @access private
  25. * @var DatabaseInterface
  26. */
  27. private $dbi;
  28. /**
  29. * Database name
  30. *
  31. * @access private
  32. * @var string
  33. */
  34. private $db;
  35. /**
  36. * Default number of columns
  37. *
  38. * @access private
  39. * @var integer
  40. */
  41. private $defaultNoOfColumns;
  42. /**
  43. * Table names
  44. *
  45. * @access private
  46. * @var array
  47. */
  48. private $tables;
  49. /**
  50. * @var Template
  51. */
  52. public $template;
  53. /**
  54. * Constructor
  55. *
  56. * @param DatabaseInterface $dbi DatabaseInterface instance
  57. * @param Template $template Template instance
  58. * @param string $dbName Database name
  59. * @param integer $defaultNoOfColumns Default number of columns
  60. */
  61. public function __construct(
  62. DatabaseInterface $dbi,
  63. Template $template,
  64. $dbName,
  65. $defaultNoOfColumns = 3
  66. ) {
  67. $this->dbi = $dbi;
  68. $this->db = $dbName;
  69. $this->defaultNoOfColumns = $defaultNoOfColumns;
  70. $this->template = $template;
  71. $this->tables = $this->dbi->getTables($this->db);
  72. }
  73. /**
  74. * Get Multi-Table query page HTML
  75. *
  76. * @return string Multi-Table query page HTML
  77. */
  78. public function getFormHtml()
  79. {
  80. $tables = [];
  81. foreach ($this->tables as $table) {
  82. $tables[$table]['hash'] = md5($table);
  83. $tables[$table]['columns'] = array_keys(
  84. $this->dbi->getColumns($this->db, $table)
  85. );
  86. }
  87. return $this->template->render('database/multi_table_query/form', [
  88. 'db' => $this->db,
  89. 'tables' => $tables,
  90. 'default_no_of_columns' => $this->defaultNoOfColumns,
  91. ]);
  92. }
  93. /**
  94. * Displays multi-table query results
  95. *
  96. * @param string $sqlQuery The query to parse
  97. * @param string $db The current database
  98. * @param string $pmaThemeImage Uri of the PMA theme image
  99. *
  100. * @return void
  101. */
  102. public static function displayResults($sqlQuery, $db, $pmaThemeImage)
  103. {
  104. list(
  105. $analyzedSqlResults,
  106. $db,
  107. ) = ParseAnalyze::sqlQuery($sqlQuery, $db);
  108. extract($analyzedSqlResults);
  109. $goto = 'db_multi_table_query.php';
  110. $sql = new Sql();
  111. $sql->executeQueryAndSendQueryResponse(
  112. null, // analyzed_sql_results
  113. false, // is_gotofile
  114. $db, // db
  115. null, // table
  116. null, // find_real_end
  117. null, // sql_query_for_bookmark - see below
  118. null, // extra_data
  119. null, // message_to_show
  120. null, // message
  121. null, // sql_data
  122. $goto, // goto
  123. $pmaThemeImage, // pmaThemeImage
  124. null, // disp_query
  125. null, // disp_message
  126. null, // query_type
  127. $sqlQuery, // sql_query
  128. null, // selectedTables
  129. null // complete_query
  130. );
  131. }
  132. }