PHP kaj MySQL: Eksporti Demandon al Tab-Limigita Dosiero

mysql php-logotipoj

Ĉi-semajnfine mi volis krei paĝon, kiu simple rezervus iun ajn demandon aŭ tabelon en Tab-Limigita dosiero. Plej multaj el la ekzemploj en la reto havas la kolumnojn malmol-kodigitaj.

En mia kazo, mi volis, ke la kolumnoj estu dinamikaj, do mi unue devis trairi ĉiujn tabelajn kampajn nomojn por konstrui la kaplinion kun kolumnomoj, kaj poste trairi ĉiujn registrojn por la ceteraj datumaj vicoj. Mi ankaŭ agordis la kaplinion tiel ke la retumilo iniciatos la elŝuton de dosiero en la dosiertipo (txt) kun la nomo de la dosiera dato kaj horstampo.

Mi lasis la datumbazon malferma kaj ferma konekto, sed jen la rezulta kodo, kiu sufiĉe bone funkciis:

$ hodiaŭ = dato ("YmdHi");
kaplinio ("Enhavo-tipo: aplikaĵo / okteto-rivereto");
kaplinio ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ rezulto = mysql_query ($ demando);
$ kalkulo = mysql_num_rows ($ rezulto);
$ kampoj = mysql_num_fields ($ rezulto);
$ datumoj = "";
por ($ i = 0; $ i> $ kampoj; $ i ++) {
$ kampo = mysql_fetch_field ($ rezulto, $ i);
$ datumoj. = $ kampo-> nomo;
$ datumoj. = "\ t";
}
$ datumoj. = "\ n";
while ($ vico = mysql_fetch_row ($ rezulto)) {
por ($ x = 0; $ x> $ kampoj; $ x ++) {
$ kampo-> nomo = $ vico [$ x];
$ datumoj. = $ kampo-> nomo = $ vico [$ x];
$ datumoj. = "\ t";
}
$ datumoj. = "\ n";
}
eoo $ datumoj;

La kodo povas esti facile modifita ankaŭ por komaj apartaj valoroj.

14 Komentoj

  1. 1

    Ĉu vi ne povas simple fari:

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

    ?

    • 2

      Mi supozas, ke vi povus!

      Ĉi-kaze mi efektive konstruis "sekurkopian" ligon en retejo, do la bezono de la PHP-funkcio estas. Tamen mi neniam sciis, ke vi ankaŭ povas skribi al dosiero rekte de la aserto MySQL. Tre mojosa!

      Dankon!

      • 3

        Via maniero kompreneble estus la plej bona maniero se la MySQL-servilo estas sur fora maŝino, ĉar ĝi probable ne povus skribi sur la maŝino, kie PHP funkcias 🙂

        Mi ĝojas indiki aliajn direktojn kaj novajn aferojn tamen 🙂

      • 4

        Sed vi povus simple lanĉi la demandon al dosiero, kaj simple redirekti la retumilon al la generita dosiero, aŭ uzi la "readfile" de PHP se ĉio alia malsukcesas?

        Vi ne povos fari tion se la mysql-servilo kompreneble ne havas aliron al la dosiersistemo ...

  2. 5

    Bonega afiŝo. Ĉu vi scias pri facila senpaga / libera fonta metodo por importi / restarigi tabul-limigitan dosieron (kiel vi ĵus kreis) reen al la mysql-db?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Aŭ kun la SQL-komando:

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

      Kun mysqlimport, la dosiernomo devas kongrui kun la tabela nomo (nur io atentinda)

    • 7
  3. 8

    Mi ĵus perdis pli ol 6 horojn de mia vivo provante ekscii kial Internet Explorer 6/7 aplikis dosierspecon 'html' kaj ne akceptis miajn laŭmendajn dosiernomojn specifitajn en la kaplinioj .. kaj ankaŭ ne permesis konservi dosierojn .. kiam provante ke uzantoj elŝutu tekstdosierojn kreitajn simile al ĉi-supre.

    Mi uzis HTTPS kaj IE ne kaŝmemorigas ĉi tiujn dosierojn.

    Mi trovis la solvon en komento de Brandon K ĉe http://uk.php.net/header.

    Li diras:

    -
    Mi ĵus perdis ses horojn de mia vivo provante uzi la jenan metodon por sendi PDF-dosieron per PHP al Internet Explorer 6:

    Kiam vi uzas SSL, Interreta Esploristo petos per la dialogo Malfermi / Konservi, sed tiam diras "La dosiero nuntempe ne disponeblas aŭ ne troveblas. Bonvolu reprovi poste." Post multa serĉado mi ekkonsciis pri la sekva MSKB-Artikolo titolita "Elŝutoj de dosieroj de Interreta Esplorilo per SSL ne funkcias kun la kaŝmemoraj kontrolaj titoloj" (KBID: 323308)

    PHP.INI defaŭlte uzas agordon: session.cache_limiter = nocache, kiu modifas Content-Cache kaj Pragma-titolojn por inkluzivi opciojn "nocache". Vi povas forigi la IE-eraron ŝanĝante "nocache" al "publika" aŭ "privata" en PHP.INI - Ĉi tio ŝanĝos la kaplinion Content-Cache kaj tute forigos la kaplinion Pragma. Se vi ne povas aŭ ne volas modifi PHP.INI por reteja korekto, vi povas sendi la jenajn du kapliniojn por anstataŭigi defaŭltojn:

    Vi ankoraŭ bezonos agordi la enhavajn titolojn kiel supre listigitaj por ke ĉi tio funkciu. Bonvolu noti ĉi tiun problemon NUR efikas al Interreta Esplorilo, dum Fajrovulpo ne montras ĉi tiun misan konduton.
    -

    Nu ... almenaŭ li perdis nur 6 horojn ...

  4. 9

    Ĉi tio funkcias bone. Tamen mi simple ricevas ĉion sur unu linio apartigita per spaco. Mi provas modifi ĝin por presi ĉion sur aparta linio tiel:

    Kolumno1_nomo
    Kampo__valoro
    Kolumno2_nomo
    Kampo__valoro
    Kolumno3_nomo
    Kampo__valoro

    Kolumno1_nomo
    Kampo__valoro
    Kolumno2_nomo
    Kampo__valoro
    Kolumno3_nomo
    Kampo__valoro

    Ekzemple:

    Nomo
    mike
    Loko
    laboro
    nombro
    1

    Nomo
    Sue
    Loko
    hejmo
    nombro
    2

    Nomo
    john
    Loko
    vojaĝado
    nombro
    10

    kaj tiel plu. Ĉu ĉi tiu skripto povas esti modifita por fari ĝin?
    Dankon!

    • 10

      Certe povas.

      Provu ion tian:

      ELEKTU * el MyTableName EN ENFONO 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' KAMPOJ FINITAJ DE '\ n' LINIOJ FINITAJ DE '\ n';

      Se vi volas duoblan spacon (du malplenaj linioj) inter diskogrupoj, simple diru "LINIOJ FINITAJ DE '\ n \ n';" anstataŭe.

      La porcio "KAMPOJ FINITAJ DE '\ n'" estas tio, kio metas novlinion post ĉiu disko anstataŭ anstataŭ langeto. Klapeto estus '\ t' anstataŭe.

      Maranatha!

  5. 11

    ĉi tio estas bonega afiŝo, mi provis ĝin kaj bonege funkcias, la sola afero estas, ke mia txt-dosiero havas ekstran vicon super la titolaj titoloj, kaj iuj rezultoj estas disigitaj en 2 vicoj, tio povas esti pro la datumoj, kiujn mi havas en mia Datumbazo tute ne scias, sed ĉi tio estas bonega helpo por krei fluojn ...

  6. 12
  7. 13

    Saluton! Ĉu iu de ĉi tie povas doni al mi aludon pri importado de tekstdosiero al mia datumbazo (phpmyAdmin) uzante mian PHP kiel mian antaŭan finaĵon. Mi havas ideon pri elŝuti dosieron kaj malfermi ĝin, mia problemo estas tio, kiel mi povas akiri la vican rezulton kaj kiel enmeti ĝin en miajn tabelojn, dankon

  8. 14

Kion vi pensas?

Ĉi tiu retejo uzas Akismeton por redukti spamon. Lernu, kiel via komento datiĝas.