PHP a MySQL: Export dotazu do souboru odděleného tabulátory

MySQL php loga

Tento víkend jsem chtěl vytvořit stránku, která by jednoduše zálohovala jakýkoli dotaz nebo tabulku do souboru odděleného tabulátory. Většina příkladů v síti má sloupce napevno.

V mém případě jsem chtěl, aby byly sloupce dynamické, takže jsem musel nejprve projít všechny názvy polí tabulky, abych vytvořil řádek záhlaví s názvy sloupců, a pak procházet všechny záznamy pro zbývající datové řádky. Také jsem nastavil záhlaví tak, aby prohlížeč zahájil stahování souboru v typu souboru (txt) s názvem data souboru a časovým razítkem.

Vynechal jsem databázi otevřenou a uzavírající připojení, ale tady je výsledný kód, který fungoval docela dobře:

$ today = date ("YmdHi");
header ("Content-type: application / octet-stream");
záhlaví ("Obsah-dispozice: příloha; název souboru = \" ". $ dnes." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ result = mysql_query ($ dotaz);
$ count = mysql_num_rows ($ výsledek);
$ fields = mysql_num_fields ($ result);
$ data = "";
pro ($ i = 0; $ i> $ pole; $ i ++) {
$ field = mysql_fetch_field ($ result, $ i);
$ data. = $ pole-> jméno;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ row = mysql_fetch_row ($ result)) {
pro ($ x = 0; $ x> $ pole; $ x ++) {
$ field-> name = $ row [$ x];
$ data. = $ pole-> jméno = $ řádek [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kód lze snadno upravit i pro hodnoty oddělené čárkami.

14 Komentáře

  1. 1
    • 2

      Předpokládám, že byste mohli!

      V tomto případě jsem ve skutečnosti vytvářel odkaz „zálohování“ ve webové aplikaci, takže jsem potřeboval funkčnost PHP. Nikdy jsem však nevěděl, že můžete také psát do souboru přímo z příkazu MySQL. Skvělý!

      Díky!

      • 3

        Vaše cesta by samozřejmě byla nejlepší cestou, pokud je server MySQL na vzdáleném počítači, protože by pravděpodobně nebyl schopen zapisovat na stroj, kde běží PHP 🙂

        Jsem rád, že mohu poukázat na jiné směry a nové věci 🙂

      • 4

        Ale stačí spustit dotaz do souboru a přesměrovat prohlížeč na vygenerovaný soubor, nebo použít „readfile“ PHP, pokud selže vše ostatní?

        Nebudete to moci udělat, pokud server mysql samozřejmě nemá přístup k souborovému systému ...

  2. 5

    Skvělý příspěvek. Znáte snadnou bezplatnou / otevřenou metodu importu / obnovení souboru odděleného tabulátory (jako jste právě vytvořili) zpět do mysql db?

    • 6

      Chyba… mysqlimport?

      mysqlimport database_name --local backup.txt

      Nebo pomocí příkazu SQL:

      LOAD DATA LOCAL INFILE 'backup.txt' INTO TABLE `my_table` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'

      U mysqlimport musí název souboru odpovídat názvu tabulky (jen něco, na co si dát pozor)

    • 7
  3. 8

    Právě jsem ztratil více než 6 hodin svého života tím, že jsem se snažil zjistit, proč Internet Explorer 6/7 používá typ souboru „html“ a nepřijímá mé vlastní názvy souborů uvedené v záhlaví .. a také neumožňuje ukládání souborů .. když pokouší se, aby uživatelé stahovali textové soubory vytvořené podobným způsobem jako výše.

    Používal jsem HTTPS a IE tyto soubory neukládá do mezipaměti.

    Řešení jsem našel v komentáři Brandona K. v http://uk.php.net/header.

    On říká:

    -
    Právě jsem ztratil šest hodin svého života pokusem použít následující metodu k odeslání souboru PDF přes PHP do aplikace Internet Explorer 6:

    Při použití protokolu SSL se aplikace Internet Explorer zobrazí s dialogovým oknem Otevřít / Uložit, ale poté řekne: „Soubor je aktuálně nedostupný nebo jej nelze najít. Prosím zkuste to znovu později." Po dlouhém hledání jsem si uvědomil následující článek MSKB s názvem „Stahování souborů aplikace Internet Explorer přes SSL nefunguje s hlavičkami řízení mezipaměti“ (KBID: 323308)

    PHP.INI ve výchozím nastavení používá nastavení: session.cache_limiter = nocache, které upravuje záhlaví Content-Cache a Pragma tak, aby obsahovaly možnosti „nocache“. Můžete odstranit chybu IE změnou „nocache“ na „public“ nebo „private“ v PHP.INI - Tím se změní záhlaví Content-Cache a úplně se odstraní záhlaví Pragma. Pokud nemůžete nebo nechcete upravit PHP.INI pro opravu celého webu, můžete odeslat následující dvě záhlaví k přepsání výchozích hodnot:

    Aby to fungovalo, budete i nadále muset nastavit záhlaví obsahu, jak je uvedeno výše. Vezměte prosím na vědomí, že tento problém ovlivňuje POUZE prohlížeč Internet Explorer, zatímco Firefox toto chybné chování nevykazuje.
    -

    No .. alespoň ztratil jen 6 hodin ...

  4. 9

    To funguje dobře. Prostě mám všechno na jednom řádku odděleném mezerou. Snažím se to upravit tak, aby vše tisklo na samostatném řádku takto:

    Název_sloupce
    Pole1_hodnota
    Název_sloupce
    Pole1_hodnota
    Název_sloupce
    Pole1_hodnota

    Název_sloupce
    Pole2_hodnota
    Název_sloupce
    Pole2_hodnota
    Název_sloupce
    Pole2_hodnota

    Například:

    Jméno a Příjmení
    mikrofon
    Sídlo
    Práce
    Číslo
    1

    Jméno a Příjmení
    Žalovat
    Sídlo
    Domovská stránka
    Číslo
    2

    Jméno a Příjmení
    John
    Sídlo
    Cestovat
    Číslo
    10

    a tak dále. Je možné tento skript upravit?
    Díky!

    • 10

      Jistě ano.

      Zkuste něco takového:

      SELECT * from MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' FIELDS TERMINATED by '\ n' LINES TERMINATED by '\ n';

      Pokud chcete dvojitou mezeru (dva prázdné řádky) mezi skupinami záznamů, řekněte „LINES TERMINATED by '\ n \ n';“ namísto.

      Část „FIELDS TERMINATED BY '\ n“ je to, co za každý záznam vloží nový řádek místo karty. Karta by místo toho byla „\ t“.

      Maranatha!

  5. 11

    to je vzdorně skvělý příspěvek, zkusil jsem to a funguje skvěle, jediná věc je, že můj soubor txt má nad řádky záhlaví další řádek a některé výsledky jsou odděleny ve 2 řádcích, což může být způsobeno údaji, které mám v mé databázi žádný nápad, ale je to skvělá pomoc při vytváření zdrojů ...

  6. 12
  7. 13

    Nazdárek! Existuje někdo odtud, který mi může pomoci při importu textového souboru do mé databáze (phpmyAdmin) pomocí mého php jako mého frontendu. Mám představu o stažení souboru a jeho otevření, můj problém je, že jak mohu získat výsledek řádku a jak jej vložit do mých tabulek, díky

  8. 14

Co si myslíte?

Tyto stránky používají Akismet k omezení spamu. Zjistěte, jak jsou vaše údaje komentářů zpracovávány.