PHP eta MySQL: Esportatu kontsulta fitxa bidez mugatutako fitxategi batera

mysql php logotipoak

Asteburu honetan edozein kontsulta edo taula babestuko duen orri bat eraiki nahi nuen Tab Mugatutako fitxategi batean. Sarean agertzen diren adibide gehienek zutabeek kodeketa gogorra dute.

Nire kasuan, zutabeak dinamikoak izatea nahi nuenez, lehenengo taulako eremuen izen guztiak begiztatu behar nituen goiburuko errenkada zutabe izenekin eraikitzeko eta, ondoren, gainerako datu ilaretako erregistro guztiak begiztatu. Goiburua ere ezartzen dut, arakatzaileak fitxategiaren deskarga fitxategi motan (txt) has dezan fitxategiaren data eta denbora markarekin izenarekin.

Datu basea ireki eta ixteko konexioa utzi nuen, baina hona hemen nahiko ondo funtzionatu duen kodea:

$ gaur = data ("YmdHi");
goiburua ("Eduki mota: aplikazioa / zortzikote korrontea");
goiburua ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` order by `myorder`";
$ emaitza = mysql_query ($ kontsulta);
$ zenbaketa = mysql_num_rows ($ emaitza);
$ eremuak = mysql_num_fields ($ emaitza);
$ datuak = "";
for ($ i = 0; $ i> $ eremuak; $ i ++) {
$ eremua = mysql_fetch_field ($ emaitza, $ i);
$ datuak. = $ eremua-> izena;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ errenkada = mysql_fetch_row ($ emaitza)) {
for ($ x = 0; $ x> $ eremuak; $ x ++) {
$ eremua-> izena = $ errenkada [$ x];
$ datuak. = $ eremua-> izena = $ errenkada [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ datuak;

Kodea erraz alda daiteke komaz bereizitako balioetarako ere.

14 Comments

  1. 1

    Ezin duzu besterik egin:

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

    ?

    • 2

      Ahal izango duzula suposatzen dut!

      Kasu honetan, web aplikazio batean "segurtasun kopia" esteka bat eraikitzen ari nintzen, beraz, PHP funtzionalitatea behar nuen. Hala ere, ez nuen sekula jakin MySQL instrukziotik zuzenean fitxategi batean ere idatz zenezakeenik. Oso cool!

      Eskerrik asko!

      • 3

        Zure bidea noski izango litzateke egokiena MySQL zerbitzaria urruneko makina batean badago, seguruenik ezingo litzatekeelako PHP exekutatzen ari den makinan idatzi write

        Pozik nago beste norabide batzuk eta gauza berriak adierazteaz 🙂

      • 4

        Baina kontsulta fitxategi batera exekutatu eta arakatzailea sortutako fitxategira bideratu edo PHPren "readfile" erabil dezakezu beste guztiak huts egiten badu?

        Ezin izango duzu hori egin mysql zerbitzariak noski fitxategi sistemarako sarbidea ez badu ...

  2. 5

    Mezu bikaina. Ezagutzen al duzu fitxa bidez mugatutako fitxategi bat (sortu berri duzun bezala) mysql db-ra berriro inportatzeko / leheneratzeko iturri irekiko / doako metodo erraza?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Edo SQL komandoarekin:

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

      Mysqlimport-ekin, fitxategi-izenak bat egin behar du taularen izenarekin (kontutan izan beharrekoa)

    • 7
  3. 8

    Nire bizitzako 6 ordu baino gehiago galdu ditut Internet Explorer 6/7 zergatik fitxategi mota "html" aplikatzen ari den jakiteko eta goiburuetan zehaztutako nire izen pertsonalizatuak ez onartzeko eta fitxategiak gordetzea ere ez uzteko .. Erabiltzaileek aurrekoaren antzera sortutako testu fitxategiak deskargatzen saiatzea.

    HTTPS erabiltzen nuen eta IE-k ez ditu fitxategi hauek gordetzen.

    Brandon K-en iruzkin batean aurkitu nuen irtenbidea http://uk.php.net/header.

    Honela dio:

    -
    Nire bizitzako sei ordu galdu berri ditut honako metodo hau erabili nahian PDF fitxategia PHP bidez Internet Explorer 6ra bidaltzeko:

    SSL erabiltzen duzunean, Internet Explorer-ek Ireki / Gorde elkarrizketa-koadroarekin galdetuko du, baina gero "Fitxategia ez dago erabilgarri edo ezin da aurkitu. Saiatu berriro geroago. " Bilaketa asko egin ondoren, MSKB artikulu honen berri izan nuen "SSL bidez Internet Explorer fitxategien deskargek ez dute cache kontroleko goiburuekin funtzionatzen" (KBID: 323308)

    PHP.INIk lehenespenez ezarpen bat erabiltzen du: session.cache_limiter = nocache Edukia-cachea eta Pragma goiburuak aldatzen dituena "nocache" aukerak sartzeko. IE akatsa ezabatu dezakezu PHP.INI "nocache" "publiko" edo "pribatu" gisa aldatuz - Honek Content-Cache goiburua aldatuko du eta Pragma goiburua guztiz kenduko du. Gune osoko konponketarako PHP.INI aldatu ezin baduzu edo nahi ez baduzu, bi goiburu hauek bidal ditzakezu lehenetsiak gainidazteko:

    Horretarako, goian zerrendatutako edukiaren goiburuak ezarri beharko dituzu. Mesedez, kontuan izan arazo honek Internet Explorer-ek soilik eragiten duela, baina Firefoxek ez du akatsen portaera hori erakusten.
    -

    Beno .. gutxienez 6 ordu bakarrik galdu zituen ...

  4. 9

    Honek ondo funtzionatzen du. Hala ere, dena espazio batez bereizitako lerro bakarrean lortzen dut. Aldatzen saiatzen ari naiz dena honelako lerro bereizi batean inprimatzeko:

    Zutabe1_izena
    Eremu1_balioa
    Zutabe2_izena
    Eremu1_balioa
    Zutabe3_izena
    Eremu1_balioa

    Zutabe1_izena
    Eremu2_balioa
    Zutabe2_izena
    Eremu2_balioa
    Zutabe3_izena
    Eremu2_balioa

    Adibidez:

    izena
    Mike
    kokapena
    Lana
    Zenbakia
    1

    izena
    Sue
    kokapena
    Hasiera
    Zenbakia
    2

    izena
    John
    kokapena
    Bidaiak
    Zenbakia
    10

    eta abar. Script hau alda al daiteke?
    Eskerrik asko!

    • 10

      Seguru asko.

      Saiatu horrelako zerbait:

      SELECT * from MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' 'EREMUAK BERRITUTAKO EREMUAK' \ n 'LINEAK BEREIZITAKO' \ n ';

      Erregistro taldeen artean espazio bikoitza (bi lerro huts) nahi baduzu, esan besterik ez duzu "'\ n \ n' -K BURUTUTAKO LERROAK;" horren ordez.

      '\ N' BEREIZTUTAKO EREMUAK atalak lerro berri bat jartzen du erregistro bakoitzaren ondoren, fitxa baten ordez. Fitxa bat '\ t' izango litzateke horren ordez.

      Maranatha!

  5. 11

    hau zalantzarik gabe mezu bikaina da, probatu dut eta primeran funtzionatzen dut, gauza bakarra da nire txt fitxategiak goiburuko izenburuen gainetik errenkada gehigarria duela eta emaitza batzuk 2 errenkadatan bereizita daudela. Hau da, ditudan datuek eragin dezaketela. nire datu-basean ideiarik ere ez, baina jarioak eraikitzeko laguntza handia da ...

  6. 12

    Douglas Karr zure kodea benetan harritzen da! Oso erabilgarria da batez ere testu fitxategi formatuan dagoen irteera bat behar baduzu. Mila esker! Filipinetako taldetik!

  7. 13

    Aupa! Ba al dago hemendik testu fitxategi bat nire datu basera (phpmyAdmin) inportatzeari buruzko aholkurik eman diezadakeen nire php-a frontend gisa erabiliz? Fitxategi bat deskargatu eta irekitzeari buruzko ideia bat daukat. Nire arazoa da errenkadaren emaitza nola lor dezakedan eta nire tauletan nola txertatu. Eskerrik asko

  8. 14

Zer deritzozu?

Gune honek Akismet-ek spam erabiltzen du. Ikasi zure iruzkina nola prozesatu den.