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((isset($_GET["import"]) ? lang('Import') : lang('SQL command')), $error); if (!$error && $_POST) { $fp = false; if (!isset($_GET["import"])) { $query = $_POST["query"]; } elseif ($_POST["webfile"]) { $fp = @fopen((file_exists("adminer.sql") ? "adminer.sql" : "compress.zlib://adminer.sql.gz" ), "rb"); $query = ($fp ? fread($fp, 1e6) : false); } else { $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", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables } if ($query != "" && strlen($query) < 1e6) { // don't add big queries $q = $query . (preg_match("~;[ \t\r\n]*\$~", $query) ? "" : ";"); //! doesn't work with DELIMITER | if (!$history || reset(end($history)) != $q) { // no repeated queries restart_session(); $history[] = array($q, time()); //! add elapsed time set_session("queries", $history_all); // required because reference is unlinked by stop_session() stop_session(); } } $space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\r?\n)"; $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 == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : ''); $total_start = microtime(true); parse_str($_COOKIE["adminer_export"], $adminer_export); $dump_format = $adminer->dumpFormat(); unset($dump_format["sql"]); while ($query != "") { if (!$offset && preg_match("~^$space*DELIMITER\\s+(\\S+)~i", $query, $match)) { $delimiter = $match[1]; $query = substr($query, strlen($match[0])); } else { preg_match('(' . preg_quote($delimiter) . "\\s*|$parse)", $query, $match, PREG_OFFSET_CAPTURE, $offset); // should always match list($found, $pos) = $match[0]; if (!$found && $fp && !feof($fp)) { $query .= fread($fp, 1e5); } else { if (!$found && rtrim($query) == "") { break; } $offset = $pos + strlen($found); if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES $s = $match[0][0]; if (!$s && $fp && !feof($fp)) { $query .= fread($fp, 1e5); } else { $offset = $match[0][1] + strlen($s); if ($s[0] != "\\") { break; } } } } else { // end of a query $empty = false; $q = substr($query, 0, $pos); $commands++; $print = "
" . shorten_utf8(trim($q), 1000) . "
\n";
if ($jush == "sqlite" && preg_match("~^$space*ATTACH\b~i", $q, $match)) {
// PHP doesn't support setting SQLITE_LIMIT_ATTACHED
echo $print;
echo "" . lang('ATTACH queries are not supported.') . "\n"; $errors[] = " $commands"; if ($_POST["error_stops"]) { break; } } else { if (!$_POST["only_errors"]) { echo $print; ob_flush(); flush(); // can take a long time - show the running query } $start = microtime(true); //! don't allow changing of character_set_results, convert encoding of displayed query if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*USE\\b~isU", $q)) { $connection2->query($q); } do { $result = $connection->store_result(); $time = " (" . format_time($start) . ")" . (strlen($q) < 1000 ? " " . lang('Edit') . "" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters ; if ($connection->error) { echo ($_POST["only_errors"] ? $print : ""); echo "
" . lang('Error in query') . ($connection->errno ? " ($connection->errno)" : "") . ": " . error() . "\n"; $errors[] = " $commands"; if ($_POST["error_stops"]) { break 2; } } elseif (is_object($result)) { $limit = $_POST["limit"]; $orgtables = select($result, $connection2, array(), $limit); if (!$_POST["only_errors"]) { echo "
\n"; } } else { if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) { restart_session(); set_session("dbs", null); // clear cache stop_session(); } if (!$_POST["only_errors"]) { echo "" . lang('Error in query') . ": " . implode("", $errors) . "\n"; } //! MS SQL - SET SHOWPLAN_ALL OFF } else { echo "
" . upload_error($query) . "\n"; } } ?>