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!

      En ĉi tiu kazo, mi efektive konstruis "rezervan" ligilon en retejo, do la PHP-funkcio estas tio, kion mi bezonis. Tamen, mi neniam sciis, ke vi ankaŭ povas skribi al dosiero rekte de la MySQL-deklaro. Tre mojosa!

      Dankon!

      • 3

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

        Mi ĝojas indiki aliajn direktojn kaj novajn aferojn 🙂

      • 4

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

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

  2. 5

    Bonega afiŝo. Ĉu vi konas facilan, senpagan/malfermfontan metodon por importi/restarigi tabul-limigitan dosieron (kiel vi ĵus kreis) reen en la mysql db?

    • 6

      Ĉu... mysqlimport?

      mysqlimport database_name --local backup.txt

      Aŭ per 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 tabelnomo (nur io por atenti)

    • 7
  3. 8

    Mi ĵus perdis pli ol 6 horojn de mia vivo provante eltrovi kial Internet Explorer 6/7 aplikis dosiertipon 'html' kaj ne akceptis miajn kutimajn dosiernomojn specifitajn en la kaplinioj.. kaj ankaŭ ne permesis konservi dosierojn.. kiam provante ke uzantoj elŝutu tekstdosierojn kreitajn en simila maniero al supre.

    Mi uzis HTTPS kaj IE ne konservas ĉ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, Interreto Explorer petos per la dialogo Malfermi / Konservi, sed tiam diras "La dosiero estas nuntempe neatingebla aŭ ne troveblas. Bonvolu reprovi poste." Post multe da serĉado mi ekkonsciis pri la sekva MSKB-Artikolo titolita "Elŝutoj de dosieroj de Interreto Explorer per SSL ne funkcias kun la kaŝkontrolaj kaplinioj" (KBID: 323308)

    PHP.INI defaŭlte uzas agordon: session.cache_limiter = nocache kiu modifas Content-Cache kaj Pragma-kapojn por inkluzivi "nocache" opciojn. 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 tutreteja riparo, vi povas sendi la sekvajn du titolojn por anstataŭigi defaŭltojn:

    Por ke tio funkciu, vi ankoraŭ devos agordi la enhavajn kapliniojn kiel supre listigitajn. Bonvolu noti, ke ĉi tiu problemo NUR efikas Interreton Explorer, dum Fajrovulpo ne elmontras ĉi tiun misan konduton.
    -

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

  4. 9

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

    Kolumno1_nomo
    Kampo1_valoro
    Kolumno2_nomo
    Kampo1_valoro
    Kolumno3_nomo
    Kampo1_valoro

    Kolumno1_nomo
    Kampo2_valoro
    Kolumno2_nomo
    Kampo2_valoro
    Kolumno3_nomo
    Kampo2_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 EKSTERISION 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' KAMPOJN FINITAJ PER '\n' LINIOJ FINITAJ PER '\n';

      Se vi volas duoblan spacon (du malplenaj linioj) inter rekordaj grupoj, simple diru "LINIOJ TERMINATAJ PER '\n\n';" anstataŭe.

      La parto “KAMPOJ FINITAJ PER '\n'” estas kio metas novlinion post ĉiu registro, anstataŭ langeto. Langeto estus '\t' anstataŭe.

      Maranatha!

  5. 11

    ĉi tio sendube estas bonega afiŝo, mi provis ĝin kaj funkcias bonege, la nura afero estas, ke mia txt-dosiero havas kroman vicon super la titoloj de la kaplinio, kaj iuj rezultoj estas apartigitaj en 2 vicoj, tio povas esti kaŭzita de la datumoj kiujn mi havas. en mia datumbazo neniu ideo, sed ĉi tio estas bonega helpo por konstrui fluojn...

  6. 12

    Douglas Karr via kodo vere tremas! Ĝi estas tre utila precipe se vi nur bezonas eligon kiu estas en tekstdosierformato. Multaj dankoj! De teamo Filipinoj!

  7. 13

    Saluton! Ĉu estas iu de ĉi tie, kiu povas doni al mi sugeston pri importado de tekstdosiero al mia datumbazo (phpmyAdmin) uzante mian php kiel mian antaŭfinon. Mi havas ideon pri elŝuto de dosiero kaj malfermi ĝin, mia problemo estas, ke kiel mi povas ricevi la vicon 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.