]> git.joonet.de Git - adminer.git/commitdiff
Export only selected columns
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Sat, 13 Jun 2009 17:20:29 +0000 (17:20 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Sat, 13 Jun 2009 17:20:29 +0000 (17:20 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@678 7c3ca157-0c34-0410-bff1-cbf682f78f5c

include/export.inc.php
select.inc.php

index f9fdf58df49ade8acca9be7db14c4720f5ed644d..02b161653accab981c455771b4a439b27e3f0e30 100644 (file)
@@ -116,41 +116,43 @@ DROP PROCEDURE adminer_alter;
        }
 }
 
-function dump_data($table, $style, $from = "") {
+function dump_data($table, $style, $select = "") {
        global $dbh, $max_packet;
        if ($style) {
                if ($_POST["format"] != "csv" && $style == "TRUNCATE+INSERT") {
                        echo "TRUNCATE " . idf_escape($table) . ";\n";
                }
-               $result = $dbh->query("SELECT * " . ($from ? $from : "FROM " . idf_escape($table))); //! enum and set as numbers, binary as _binary, microtime
+               $result = $dbh->query(($select ? $select : "SELECT * FROM " . idf_escape($table))); //! enum and set as numbers, binary as _binary, microtime
                if ($result) {
-                       $insert = "INSERT INTO " . idf_escape($table) . " VALUES ";
                        $length = 0;
                        while ($row = $result->fetch_assoc()) {
                                if ($_POST["format"] == "csv") {
                                        dump_csv($row);
-                               } elseif ($style == "INSERT+UPDATE") {
-                                       $set = array();
-                                       foreach ($row as $key => $val) {
-                                               $row[$key] = (isset($val) ? "'" . $dbh->escape_string($val) . "'" : "NULL");
-                                               $set[] = idf_escape($key) . " = " . (isset($val) ? "'" . $dbh->escape_string($val) . "'" : "NULL");
-                                       }
-                                       echo "INSERT INTO " . idf_escape($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES (" . implode(", ", $row) . ") ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n";
                                } else {
+                                       $insert = "INSERT INTO " . idf_escape($table) . ($select ? " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ")" : "") . " VALUES ";
+                                       $row2 = array();
                                        foreach ($row as $key => $val) {
-                                               $row[$key] = (isset($val) ? "'" . $dbh->escape_string($val) . "'" : "NULL");
+                                               $row2[$key] = (isset($val) ? "'" . $dbh->escape_string($val) . "'" : "NULL");
                                        }
-                                       $s = "(" . implode(", ", $row) . ")";
-                                       if (!$length) {
-                                               echo $insert, $s;
-                                               $length = strlen($insert) + strlen($s);
+                                       if ($style == "INSERT+UPDATE") {
+                                               $set = array();
+                                               foreach ($row as $key => $val) {
+                                                       $set[] = idf_escape($key) . " = " . (isset($val) ? "'" . $dbh->escape_string($val) . "'" : "NULL");
+                                               }
+                                               echo "$insert (" . implode(", ", $row2) . ") ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n";
                                        } else {
-                                               $length += 2 + strlen($s);
-                                               if ($length < $max_packet) {
-                                                       echo ", ", $s;
-                                               } else {
-                                                       echo ";\n", $insert, $s;
+                                               $s = "(" . implode(", ", $row2) . ")";
+                                               if (!$length) {
+                                                       echo $insert, $s;
                                                        $length = strlen($insert) + strlen($s);
+                                               } else {
+                                                       $length += 2 + strlen($s);
+                                                       if ($length < $max_packet) {
+                                                               echo ", ", $s;
+                                                       } else {
+                                                               echo ";\n", $insert, $s;
+                                                               $length = strlen($insert) + strlen($s);
+                                                       }
                                                }
                                        }
                                }
index af0f3fbb7ddcc494358844d84e3ac4c2709fc8cc..c01796304bb77dc18aa1e72ce86ca43485b10116 100644 (file)
@@ -72,12 +72,13 @@ if ($_POST && !$error) {
        if ($_POST["export"]) {
                dump_headers($_GET["select"]);
                dump_table($_GET["select"], "");
+               $from = "SELECT " . ($select ? implode(", ", $select) : "*") . " FROM " . idf_escape($_GET["select"]);
                if (is_array($_POST["check"])) {
                        foreach ($_POST["check"] as $val) {
-                               dump_data($_GET["select"], "INSERT", "FROM " . idf_escape($_GET["select"]) . " WHERE " . implode(" AND ", where_check($val)) . " LIMIT 1");
+                               dump_data($_GET["select"], "INSERT", "$from WHERE " . implode(" AND ", where_check($val)) . " LIMIT 1");
                        }
                } else {
-                       dump_data($_GET["select"], "INSERT", ($where ? "FROM " . idf_escape($_GET["select"]) . " WHERE " . implode(" AND ", $where) : ""));
+                       dump_data($_GET["select"], "INSERT", $from . ($where ? " WHERE " . implode(" AND ", $where) : ""));
                }
                exit;
        }