Vyvíjející se technologie

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

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.

Douglas Karr

Douglas Karr je zakladatelem Martech Zone a uznávaný odborník na digitální transformaci. Douglas pomohl založit několik úspěšných start-upů MarTech, pomohl s due diligence ve výši více než 5 miliard dolarů v akvizicích a investicích Martech a pokračuje v zavádění svých vlastních platforem a služeb. Je spoluzakladatelem Highbridge, poradenská firma v oblasti digitální transformace. Douglas je také publikovaným autorem průvodce pro figuríny a knihy o obchodním vedení.

Související články

13 Komentáře

    1. 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!

      1. 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 🙂

  1. 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?

    1. 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)

  2. 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 nepracuje s hlavičkami řízení mezipaměti“ (KBID: 323308)

    PHP.INI standardně používá nastavení: session.cache_limiter = nocache, které upravuje záhlaví Content-Cache a Pragma tak, aby zahrnovaly 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 ...

  3. To funguje dobře. Prostě mám vše na jednom řádku odděleném mezerou. Snažím se to upravit tak, aby tiskl vše na samostatném řádku, jako je tento:

    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:

    Název produktu
    mikrofon
    Sídlo
    Práce
    Číslo
    1

    Název produktu
    Žalovat
    Sídlo
    Home
    Číslo
    2

    Název produktu
    Jan
    Sídlo
    Cestovat
    Číslo
    10

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

    1. 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!

  4. 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ů ...

  5. Douglas Karr váš kód opravdu skáče! Je to velmi užitečné speciálně, pokud potřebujete výstup ve formátu textového souboru. Díky moc! Od týmu Filipíny!

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

Co si myslíte?

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