PHP a MySQL: Export dotazu do súboru s hodnotami oddelenými tabulátormi

logá mysql php

Tento víkend som chcel vytvoriť stránku, ktorá by jednoducho zálohovala akýkoľvek dotaz alebo tabuľku do súboru s hodnotami oddelenými tabulátormi. Väčšina príkladov v sieti má stĺpce pevne napísané.

V mojom prípade som chcel, aby boli stĺpce dynamické, takže som musel najskôr prejsť všetky názvy polí tabuľky, aby som vytvoril riadok hlavičky s názvami stĺpcov, a potom prejsť všetky záznamy o zvyšných údajových riadkoch. Nastavil som aj hlavičku tak, aby prehliadač inicioval stiahnutie súboru typu súboru (txt) s názvom dátumu a časovej pečiatky súboru.

Vynechal som databázu otvorenú a ukončujúcu spojenie, ale tu je výsledný kód, ktorý fungoval celkom dobre:

$ today = date ("YmdHi");
hlavička ("Content-type: application / octet-stream");
hlavička ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ result = mysql_query ($ dopyt);
$ count = mysql_num_rows ($ výsledok);
$ fields = mysql_num_fields ($ výsledok);
$ data = "";
pre ($ i = 0; $ i> $ polia; $ i ++) {
$ field = mysql_fetch_field ($ result, $ i);
$ data. = $ pole-> meno;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ riadok = mysql_fetch_row ($ výsledok)) {
pre ($ x = 0; $ x> $ polia; $ x ++) {
$ field-> name = $ riadok [$ x];
$ data. = $ field-> name = $ riadok [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kód je možné ľahko upraviť aj pre hodnoty oddelené čiarkami.

14 Komentáre

  1. 1
    • 2

      Predpokladám, že by ste mohli!

      V tomto prípade som vlastne staval odkaz na „zálohovanie“ vo webovej aplikácii, takže som potreboval funkčnosť PHP. Nikdy som však nevedel, že do súboru môžete písať aj priamo z príkazu MySQL. Úžasné!

      Vďaka!

      • 3

        Váš spôsob by bol samozrejme najlepším spôsobom, ak je server MySQL na vzdialenom počítači, pretože by pravdepodobne nebol schopný zapisovať na počítač, na ktorom je spustené PHP 🙂

        Radi však poukazujem na ďalšie smery a nové veci 🙂

      • 4

        Môžete však jednoducho spustiť dopyt do súboru a prehliadač presmerovať na vygenerovaný súbor alebo použiť súbor „readfile“ PHP, ak zlyhajú iné možnosti?

        Nebudete to môcť urobiť, ak server mysql samozrejme nemá prístup k súborovému systému ...

  2. 5

    Skvelý príspevok. Poznáte jednoduchý, bezplatný / otvorený zdrojový spôsob importu / obnovy súboru s oddeľovačmi (ako ste práve vytvorili) späť do databázy mysql db?

    • 6

      Chyba… mysqlimport?

      mysqlimport database_name --local backup.txt

      Alebo pomocou príkazu SQL:

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

      V prípade mysqlimport sa musí názov súboru zhodovať s názvom tabuľky (je treba si dávať pozor)

    • 7
  3. 8

    Práve som stratil viac ako 6 hodín svojho života tým, že som sa snažil zistiť, prečo Internet Explorer 6/7 používa typ súboru „html“ a neprijíma moje vlastné názvy súborov uvedené v hlavičkách .. a tiež neumožňuje ukladanie súborov .. keď sa snaží, aby používatelia sťahovali textové súbory vytvorené podobným spôsobom ako vyššie.

    Používal som HTTPS a IE tieto súbory neukladáva.

    Riešenie som našiel v komentári od Brandona K. o http://uk.php.net/header.

    On hovorí:

    -
    Práve som stratil šesť hodín svojho života tým, že som pomocou nasledujúcej metódy odoslal súbor PDF cez PHP do programu Internet Explorer 6:

    Pri použití protokolu SSL program Internet Explorer zobrazí výzvu s dialógovým oknom Otvoriť / Uložiť, ale potom zobrazí správu „Súbor je momentálne nedostupný alebo ho nemožno nájsť. Skúste neskôr prosím." Po dlhom hľadaní som si uvedomil nasledujúci článok článku MSKB s názvom „Sťahovanie súborov programu Internet Explorer cez SSL nefunguje s hlavičkami ovládacích prvkov vyrovnávacej pamäte“ (KBID: 323308)

    PHP.INI štandardne používa nastavenie: session.cache_limiter = nocache, ktoré upravuje hlavičky Content-Cache a Pragma tak, aby obsahovali možnosti „nocache“. Môžete vylúčiť chybu IE zmenou „nocache“ na „verejnú“ alebo „súkromnú“ v PHP.INI - zmení sa tak hlavička Content-Cache, ako aj úplné odstránenie hlavičky Pragma. Ak nemôžete alebo nechcete upraviť PHP.INI pre opravu na celom webe, môžete odoslať nasledujúce dve hlavičky, ktoré prepíšu predvolené hodnoty:

    Aby to fungovalo, budete musieť nastaviť hlavičky obsahu, ako sú uvedené vyššie. Upozorňujeme, že tento problém ovplyvňuje IBA program Internet Explorer, zatiaľ čo Firefox toto chybné správanie nevykazuje.
    -

    No .. aspoň stratil iba 6 hodín ...

  4. 9

    Toto funguje dobre. Mám však všetko na jednom riadku oddelenom medzerou. Snažím sa to upraviť tak, aby sa všetko vytlačilo na samostatný riadok, ako je tento:

    Stĺpec1_názov
    Pole1_value
    Stĺpec2_názov
    Pole1_value
    Stĺpec3_názov
    Pole1_value

    Stĺpec1_názov
    Pole2_value
    Stĺpec2_názov
    Pole2_value
    Stĺpec3_názov
    Pole2_value

    Napríklad:

    Meno
    mikrofón
    umiestnenie
    práca
    číslo
    1

    Meno
    Žalovať
    umiestnenie
    Domov
    číslo
    2

    Meno
    John
    umiestnenie
    Cestovanie
    číslo
    10

    a tak ďalej. Je možné tento skript upraviť, aby ste to dosiahli?
    Vďaka!

    • 10

      Jasné, že môže.

      Skúste niečo také:

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

      Ak chcete medzi skupinami záznamov dvojitú medzeru (dva prázdne riadky), stačí povedať „LINES TERMINATED by '\ n \ n';“ namiesto toho.

      Časť „POLE UKONČENÉ„ \ n ““ predstavuje nový riadok za každým záznamom namiesto karty. Karta by namiesto toho bola „\ t“.

      Maranatha!

  5. 11

    toto je vzdorne skvelý príspevok, skúsil som to a funguje skvele, jediná vec je, že môj súbor txt má nad hlavičkami nadpisov ďalší riadok a niektoré výsledky sú rozdelené do 2 riadkov, môže to byť spôsobené údajmi, ktoré mám v mojej databáze žiadny nápad, ale toto je skvelá pomoc pri vytváraní informačných kanálov ...

  6. 12

    Douglas Karr váš kód je naozaj skvelý! Je to veľmi užitočné, najmä ak potrebujete výstup vo formáte textového súboru. Mnohokrat dakujem! Od tímu Filipíny!

  7. 13

    hej ty tam! Existuje odtiaľto niekto, kto mi môže pomôcť pri importovaní textového súboru do mojej databázy (phpmyAdmin) pomocou môjho php ako môjho frontendu. Mám predstavu o stiahnutí a otvorení súboru, môj problém je, že ako môžem získať výsledok riadku a ako ho vložiť do svojich tabuliek, ďakujem

  8. 14

Čo si myslíte?

Táto stránka používa Akismet na zníženie spamu. Zistite, ako sa spracúvajú údaje vašich komentárov.