dumpHeaders("sql"); $adminer->dumpTable("", ""); $adminer->dumpData("", "table", $_POST["query"]); exit; } restart_session(); $history_all = &get_session("queries"); $history = &$history_all[DB]; if (!$error && $_POST["clear"]) { $history = array(); redirect(remove_from_uri("history")); } page_header(lang('SQL command'), $error); 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 = "
" . shorten_utf8(trim($q), 1000) . "
\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 ? " " . lang('Edit') . "" : ""); // 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 "

" . 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 "

\n"; echo "

" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time; $id = "export-$commands"; $export = ", " . lang('Export') . "" ; if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q) && ($explain = explain($connection2, $q))) { $id = "explain-$commands"; echo ", EXPLAIN$export\n"; echo "

\n"; } else { echo "$export\n"; } echo "
\n"; } $start = $end; } while ($connection->next_result()); } elseif ($connection->error) { echo ($_POST["only_errors"] ? $print : ""); echo "

" . lang('Error in query') . ": " . error() . "\n"; $errors[] = " $commands"; if ($_POST["error_stops"]) { break; } } $query = substr($query, $offset); $offset = 0; } } } } if ($empty) { echo "

" . lang('No commands to execute.') . "\n"; } elseif ($_POST["only_errors"]) { echo "

" . lang('%d query(s) executed OK.', $commands - count($errors)) . format_time($total_start, explode(" ", microtime())) . "\n"; } elseif ($errors && $commands > 1) { echo "

" . lang('Error in query') . ": " . implode("", $errors) . "\n"; } //! MS SQL - SET SHOWPLAN_ALL OFF } else { echo "

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

document.getElementsByTagName('textarea')[0].focus();\n"); echo "

" . (ini_bool("file_uploads") ? lang('File upload') . ': (< ' . ini_get("upload_max_filesize") . 'B)' : lang('File uploads are disabled.')); // ignore post_max_size because it is for all form fields together and bytes computing would be necessary ?>

"zlib", "bz2" => "bz2") as $key => $val) { if (extension_loaded($val)) { $compress[] = ".$key"; } } echo lang('Webserver file %s', "adminer.sql" . ($compress ? "[" . implode("|", $compress) . "]" : "") . ""); echo ' '; echo "\n"; if ($history) { print_fieldset("history", lang('History'), $_GET["history"] != ""); foreach ($history as $key => $val) { //! save and display timestamp echo '' . lang('Edit') . " " . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $val)))), 80, "") . "
\n"; } echo "\n"; echo "" . lang('Edit') . "\n"; echo "\n"; } ?>