select_db($_GET["db"]); } while (strlen($query)) { if (!$offset && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) { $delimiter = $match[1]; $query = substr($query, strlen($match[0])); } elseif (preg_match('(' . preg_quote($delimiter) . '|[\'`"]|/\\*|-- |#|$)', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { if ($match[0][0] && $match[0][0] != $delimiter) { // is not end of a query - find closing part $pattern = ($match[0][0] == "-- " || $match[0][0] == "#" ? '~.*~' : ($match[0][0] == "/*" ? '~.*\\*/~sU' : '~\\G([^\\\\' . $match[0][0] . ']|\\\\.)*(' . $match[0][0] . '|$)~sU')); //! respect sql_mode NO_BACKSLASH_ESCAPES preg_match($pattern, $query, $match, PREG_OFFSET_CAPTURE, $match[0][1] + 1); $offset = $match[0][1] + strlen($match[0][0]); } else { $empty = false; echo "
" . shorten_utf8(trim(substr($query, 0, $match[0][1]))) . "
\n"; ob_flush(); flush(); // can take a long time - show the running query $start = explode(" ", microtime()); // microtime(true) is available since PHP 5 //! don't allow changing of character_set_results, convert encoding of displayed query if (!$dbh->multi_query(substr($query, 0, $match[0][1]))) { echo "

" . lang('Error in query') . ": " . h($dbh->error) . "\n"; if ($_POST["error_stops"]) { break; } } else { $end = explode(" ", microtime()); $i = 0; do { $result = $dbh->store_result(); if (!$i) { echo "

" . (is_object($result) ? lang('%d row(s)', $result->num_rows) . ", ": "") . lang('%.3f s', max(0, $end[0] - $start[0] + $end[1] - $start[1])) . "\n"; $i++; } if (is_object($result)) { select($result, $dbh2); } else { if (preg_match("~^$space*(CREATE|DROP)$space+(DATABASE|SCHEMA)\\b~isU", $query)) { unset($_SESSION["databases"][$_GET["server"]]); // clear cache } echo "

" . lang('Query executed OK, %d row(s) affected.', $dbh->affected_rows) . "\n"; } } while ($dbh->next_result()); } $query = substr($query, $match[0][1] + strlen($match[0][0])); $offset = 0; } } } if ($empty) { echo "

" . lang('No commands to execute.') . "\n"; } } else { echo "

" . upload_error($query) . "\n"; } } ?>

: " . lang('History') . "\n"; foreach ($history as $key => $val) { //! save and display timestamp echo '' . lang('Edit') . ' ' . shorten_utf8(ltrim(str_replace("\n", " ", preg_replace('~^(#|-- ).*~m', '', $val))), 80, "") . "
\n"; } echo "\n"; echo "\n"; } ?>