PHP è MySQL: Esporta una Query in un File Delimitatu da Tabulazione

loghi physql mysql

Questu weekend aghju vulsutu custruisce una pagina chì facia solu una copia di salvezza di qualsiasi dumanda o tavula in un schedariu Delimitatu da Tabulazione. A maiò parte di l'esempii nantu à u net anu e colonne codificate in dura.

In u mo casu, aghju vulsutu chì e colonne sianu dinamiche, dunque aghju avutu per primu passà per tutti i nomi di campi di a tavula per custruisce a fila di l'intestazione cù nomi di colonne, è poi passà per tutti i registri per e file di dati restanti. Aghju stabilitu ancu l'intestazione per chì u navigatore inizià u scaricamentu di u fugliale in u tippu di file (txt) cù u nome di a data di u file è u timestamp.

Aghju lasciatu fora a basa di dati aperta è chjusa a cunnessione, ma eccu u codice resultante chì hà travagliatu abbastanza bè:

$ oghje = data ("YmdHi");
header ("Cuntenutu-tipu: application / octet-stream");
header ("Cuntinutu-Disposizione: attachment; filename = \" ". $ oghje." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` ordine per `myorder`";
$ result = mysql_query ($ query);
$ count = mysql_num_rows ($ result);
$ campi = mysql_num_fields ($ result);
$ data = "";
per ($ i = 0; $ i> $ campi; $ i ++) {
$ campu = mysql_fetch_field ($ result, $ i);
$ dati. = $ campu-> nome;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ fila = mysql_fetch_row ($ result)) {
per ($ x = 0; $ x> $ campi; $ x ++) {
$ campu-> nome = $ fila [$ x];
$ dati. = $ campu-> nome = $ fila [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

U codice pò esse facilmente mudificatu per valori separati da virgule.

14 Comments

  1. 1

    Ùn pudete micca fà:

    SELECT `mytable` order by `myorder`
    INTO OUTFILE '/tmp/Backup.txt'
    FIELDS TERMINATED BY '\t'
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'

    ?

    • 2

      Pensu chì puderete!

      In questu casu, eru in realtà custruendu un ligame di "backup" in una applicazione web, allora a funzionalità PHP hè ciò chì avia bisognu. Tuttavia, ùn aghju mai saputu chì pudete scrive ancu in un fugliale direttamente da a dichjarazione MySQL. Moltu bellu!

      Grazie!

      • 3

        U vostru modu seria naturalmente u megliu modu se u servitore MySQL sia nantu à una macchina remota, perchè probabilmente ùn saria micca capace di scrive nantu à a macchina induve PHP esegue 🙂

        Cuntentu di signalà altre direzzioni è cose nove quantunque 🙂

      • 4

        Ma puderete ghjustu lancià a dumanda in un fugliale, è solu redirigisce u navigatore versu u fugliale generatu, o aduprà u "readfile" di PHP se tuttu u restu fiasca?

        Ùn puderete micca fà quessa se u servitore mysql ùn hà micca accessu à u sistema di file naturalmente ...

  2. 5

    Gran postu. Cunniscite un metudu faciule, liberu / open source per importà / ristabilisce un schedariu delimitatu da tabulazione (cum'è avete creatu) torna in u mysql db?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      O cù u cumandimu SQL:

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

      Cù mysqlimport, u nome di fugliale hà da currisponde à u nome di a tavula (solu qualcosa da guardà)

    • 7
  3. 8

    Aghju ghjustu persu più di 6 ore di a mo vita pruvendu à capì perchè Internet Explorer 6/7 applicava u tippu di file "html" è ùn accettava micca i mo nomi di fugliali persunalizati specificati in l'intestazione .. è ancu ùn permettenu micca di salvà i fugliali .. pruvendu à avè l'utilizatori à scaricà i fugliali di testu creati in modu simili à quì sopra.

    Aghju utilizatu HTTPS è IE ùn cache micca questi fugliali.

    Aghju trovu a suluzione annantu à un cummentu di Brandon K à http://uk.php.net/header.

    Dice:

    -
    Aghju persu sei ore di a mo vita pruvendu à aduprà u metudu seguente per mandà un schedariu PDF via PHP à Internet Explorer 6:

    Quandu si usa SSL, Internet Explorer vi invitarà cù u dialogu Apertu / Salvà, ma dopu dice "U schedariu ùn hè micca dispunibile o ùn si pò micca truvà. Pruvate torna dopu. " Dopu assai ricerche aghju avutu cunnuscenza di l'articulu MSKB seguente intitulatu "Internet Explorer file download over SSL ùn funziona micca cù l'intestazione di cuntrollu di cache" (KBID: 323308)

    PHP.INI per difettu utilizza un paràmetru: session.cache_limiter = nocache chì modifica l'intestazione Content-Cache è Pragma per includere opzioni "nocache". Pudete eliminà l'errore IE cambiendu "nocache" in "publicu" o "privatu" in PHP.INI - Questu cambierà l'intestazione Content-Cache è eliminerà cumpletamente l'intestazione Pragma. Se ùn pudete micca o ùn vulete micca mudificà PHP.INI per una riparazione in tuttu u situ, pudete mandà i seguenti dui headers per rimpiazzà i predefiniti:

    Averete ancu bisognu di stabilisce e intestazioni di cuntenutu cum'è elencate sopra per chì questu funziona. Per piacè nutate chì stu prublema affetta SOLU Internet Explorer, mentre Firefox ùn mostra micca stu cumpurtamentu difettu.
    -

    Beh ... almenu hà persu solu 6 ore ...

  4. 9

    Questu funziona bè. Tuttavia, aghju solu tuttu nantu à una linea separata da un spaziu. Provu à mudificallu per stampà tuttu nantu à una linea separata cusì:

    Culonna1_nomu
    Campu1_valore
    Culonna2_nomu
    Campu1_valore
    Culonna3_nomu
    Campu1_valore

    Culonna1_nomu
    Campu2_valore
    Culonna2_nomu
    Campu2_valore
    Culonna3_nomu
    Campu2_valore

    Per esempiu:

    nomu
    Mike
    Location
    travagliu
    Nombre
    1

    nomu
    Sue
    Location
    Home
    Nombre
    2

    nomu
    Ghjuvanni
    Location
    Travel
    Nombre
    10

    eccetera. Stu script pò esse mudificatu per fà lu?
    Grazie!

    • 10

      Sure can.

      Pruvate qualcosa cusì:

      SELEZIONA * da MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' CAMPI TERMINATI DA '\ n' LINEE TERMINATE DA '\ n';

      Se vulete un spaziu doppiu (duie linee viote) trà gruppi di discu, basta dì "LINEE TERMINATE DA '\ n \ n';" invece.

      A parte "CAMPI TERMINATI DA '\ n'" hè quella chì mette una nova linea dopu à ogni registru, invece di una tabulazione. Una tabulazione seria '\ t' invece.

      Maranatha!

  5. 11

    questu hè sfidatamente un bellu postu, l'aghju pruvatu è travagliu bè, l'unicu hè chì u mo schedariu txt hà una fila in più sopra i tituli di l'intestazione, è alcuni risultati sò stati separati in 2 file, questu pò esse causatu da i dati chì aghju in a mo basa di dati nisuna idea, ma questu hè un grande aiutu per custruisce feed ...

  6. 12

    Douglas Karr u vostru còdice hè veramente rock! Hè assai utile soprattuttu se avete solu bisognu di una uscita chì sia in furmatu di testu. Grazie tante! Da a squadra Filippine!

  7. 13

    aiò! Ci hè qualchissia da quì chì mi possa dà un suggerimentu nantu à l'importazione di un testu in a mo basa di dati (phpmyAdmin) aduprendu u mo php cum'è u mo front-end. Aghju una idea di scaricà un fugliale è di aprallu, u mo prublema hè chì cumu possu uttene u risultatu di a fila è cumu inserì lu in e mo tavule, grazie

  8. 14

Chì ne pensi?

Stu situ utilizeghja Akismet per reducisce u puzzicheghju. Sapete ciò chì i dati di i vostri dati è processatu.