/**
* Runs query inside import buffer. This is needed to allow displaying
* of last SELECT, SHOW or HANDLER results and similar nice stuff.
*
* @param string $sql query to run
* @param string $full query to display, this might be commented
* @param array &$sql_data SQL parse data storage
*
* @return void
* @access public
*/
function PMA_executeQuery($sql, $full, &$sql_data)
{
global $go_sql, $sql_query, $my_die, $error, $reload, $result, $msg, $cfg, $sql_query_disabled, $db;
$result = $GLOBALS['dbi']->tryQuery($sql);
// USE query changes the database, son need to track
// while running multiple queries
$is_use_query = mb_stripos($sql, "use ") !== false;
$msg = '# ';
if ($result === false) {
// execution failed
if (!isset($my_die)) {
$my_die = array();
}
$my_die[] = array('sql' => $full, 'error' => $GLOBALS['dbi']->getError());
$msg .= __('Error');
if (!$cfg['IgnoreMultiSubmitErrors']) {
$error = true;
return;
}
} else {
$a_num_rows = (int) @$GLOBALS['dbi']->numRows($result);
$a_aff_rows = (int) @$GLOBALS['dbi']->affectedRows();
if ($a_num_rows > 0) {
$msg .= __('Rows') . ': ' . $a_num_rows;
} elseif ($a_aff_rows > 0) {
$message = Message::getMessageForAffectedRows($a_aff_rows);
$msg .= $message->getMessage();
} else {
$msg .= __('MySQL returned an empty result set (i.e. zero ' . 'rows).');
}
if ($a_num_rows > 0 || $is_use_query) {
$sql_data['valid_sql'][] = $sql;
if (!isset($sql_data['valid_queries'])) {
$sql_data['valid_queries'] = 0;
}
$sql_data['valid_queries']++;
}
}
if (!$sql_query_disabled) {
$sql_query .= $msg . "\n";
}
// If a 'USE <db>' SQL-clause was found and the query
// succeeded, set our current $db to the new one
if ($result != false) {
list($db, $reload) = PMA_lookForUse($sql, $db, $reload);
}
$pattern = '@^[\\s]*(DROP|CREATE)[\\s]+(IF EXISTS[[:space:]]+)' . '?(TABLE|DATABASE)[[:space:]]+(.+)@im';
if ($result != false && preg_match($pattern, $sql)) {
$reload = true;
}
}