Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (!$error && $_POST) {
- $fp = false;
- $query = $_POST["query"];
- if ($_POST["webfile"]) {
- $fp = @fopen((file_exists("adminer.sql") ? "adminer.sql"
- : (file_exists("adminer.sql.gz") ? "compress.zlib://adminer.sql.gz"
- : "compress.bzip2://adminer.sql.bz2"
- )), "rb");
- $query = ($fp ? fread($fp, 1e6) : false);
- } elseif ($_FILES && $_FILES["sql_file"]["error"] != 4) { // 4 - UPLOAD_ERR_NO_FILE
- $query = get_file("sql_file", true);
- }
- if (is_string($query)) { // get_file() returns error as number, fread() as false
- if (function_exists('memory_get_usage')) {
- @ini_set("memory_limit", 2 * strlen($query) + memory_get_usage() + 8e6); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
- }
- if ($query != "" && strlen($query) < 1e6 && (!$history || end($history) != $query)) { // don't add repeated and big queries
- $history[] = $query;
- }
- $space = "(\\s|/\\*.*\\*/|(#|-- )[^\n]*\n|--\n)";
- if (!ini_bool("session.use_cookies")) {
- session_write_close();
- }
- $delimiter = ";";
- $offset = 0;
- $empty = true;
- $connection2 = connect(); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error
- if (is_object($connection2) && DB != "") {
- $connection2->select_db(DB);
- }
- $commands = 0;
- $errors = array();
- $parse = '[\'`"]' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : ($jush == "mssql" || $jush == "sqlite" ? '|\\[' : '')) . '|/\\*|-- |#'; //! ` and # not everywhere
- $total_start = explode(" ", microtime());
- parse_str($_COOKIE["adminer_export"], $adminer_export);
- $dump_format = $adminer->dumpFormat();
- unset($dump_format["sql"]);
- while ($query != "") {
- if (!$offset && $jush == "sql" && preg_match('~^\\s*DELIMITER\\s+(.+)~i', $query, $match)) {
- $delimiter = $match[1];
- $query = substr($query, strlen($match[0]));
- } else {
- preg_match('(' . preg_quote($delimiter) . "|$parse|\$)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match
- $found = $match[0][0];
- $offset = $match[0][1] + strlen($found);
- if (!$found && $fp && !feof($fp)) {
- $query .= fread($fp, 1e5);
- } else {
- if (!$found && rtrim($query) == "") {
- break;
- }
- if ($found && $found != $delimiter) { // find matching quote or comment end
- while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
- $s = $match[0][0];
- $offset = $match[0][1] + strlen($s);
- if (!$s && $fp && !feof($fp)) {
- $query .= fread($fp, 1e6);
- } elseif ($s[0] != "\\") {
- break;
- }
- }
- } else { // end of a query
- $empty = false;
- $q = substr($query, 0, $match[0][1]);
- $commands++;
- $print = "<pre id='sql-$commands'><code class='jush-$jush'>" . shorten_utf8(trim($q), 1000) . "</code></pre>\n";
- if (!$_POST["only_errors"]) {
- echo $print;
- 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 ($connection->multi_query($q)) {
- if (is_object($connection2) && preg_match("~^$space*(USE)\\b~isU", $q)) {
- $connection2->query($q);
- }
- do {
- $result = $connection->store_result();
- $end = explode(" ", microtime());
- $time = format_time($start, $end) . (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : ""); // 1000 - maximum length of encoded URL in IE is 2083 characters
- if (!is_object($result)) {
- if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
- restart_session();
- set_session("dbs", null); // clear cache
- session_write_close();
- }
- if (!$_POST["only_errors"]) {
- echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "$time\n";
- }
- } else {
- if ($_POST["only_errors"]) {
- echo $print;
- $print = "";
- }
- select($result, $connection2);
- echo "<form action='' method='post'>\n";
- echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time;
- $id = "export-$commands";
- $export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: "
- . html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
- . html_select("format", $dump_format, $adminer_export["format"])
- . "<input type='hidden' name='query' value='" . h($q) . "'>"
- . " <input type='submit' name='export' value='" . lang('Export') . "' onclick='eventStop(event);'><input type='hidden' name='token' value='$token'></span>"
- ;
- if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q) && ($explain = explain($connection2, $q))) {
- $id = "explain-$commands";
- echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export\n";
- echo "<div id='$id' class='hidden'>\n";
- select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#" : ""));
- echo "</div>\n";
- } else {
- echo "$export\n";
- }
- echo "</form>\n";
- }
- $start = $end;
- } while ($connection->next_result());
- } elseif ($connection->error) {
- echo ($_POST["only_errors"] ? $print : "");
- echo "<p class='error'>" . lang('Error in query') . ": " . error() . "\n";
- $errors[] = " <a href='#sql-$commands'>$commands</a>";
- if ($_POST["error_stops"]) {
- break;
- }
- }
- $query = substr($query, $offset);
- $offset = 0;
- }
- }
- }
- }
- if ($empty) {
- echo "<p class='message'>" . lang('No commands to execute.') . "\n";
- } elseif ($_POST["only_errors"]) {
- echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors)) . format_time($total_start, explode(" ", microtime())) . "\n";
- } elseif ($errors && $commands > 1) {
- echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
- }
- //! MS SQL - SET SHOWPLAN_ALL OFF
- } else {
- echo "<p class='error'>" . upload_error($query) . "\n";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement