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!

      In this case, I was actually building a ‘backup’ link in a web application, so the PHP functionality is what I needed. However, I never knew you could also write to a file directly from the MySQL statement. Very cool!

      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

      Errr… 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:

    When using SSL, Internet Explorer will prompt with the Open / Save dialog, but then says “The file is currently unavailable or cannot be found. Please try again later.” After much searching I became aware of the following MSKB Article titled “Internet Explorer file downloads over SSL do not work with the cache control headers” (KBID: 323308)

    PHP.INI by default uses a setting: session.cache_limiter = nocache which modifies Content-Cache and Pragma headers to include “nocache” options. You can eliminate the IE error by changing “nocache” to “public” or “private” in PHP.INI — This will change the Content-Cache header as well as completely remove the Pragma header. If you cannot or do not want to modify PHP.INI for a site-wide fix, you can send the following two headers to overwrite defaults:

    You will still need to set the content headers as listed above for this to work. Please note this problem ONLY effects Internet Explorer, while Firefox does not exhibit this flawed behavior.
    -

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

  4. 9

    This works well. However, I just get everything on one line separated by a space. I am trying to modify it to print everything on a separate line like this:

    Název_sloupce
    Field1_value
    Název_sloupce
    Field1_value
    Název_sloupce
    Field1_value

    Název_sloupce
    Field2_value
    Název_sloupce
    Field2_value
    Název_sloupce
    Field2_value

    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

    and so on. Can this script be modified to do it?
    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.

      The “FIELDS TERMINATED BY ‘\n'” portion is what puts a newline after each record, instead of a tab. A tab would be ‘\t’ instead.

      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.