PHP ja MySQL: päringu eksportimine tabulatsiooniga eraldatud faili

mysql php logod

Sel nädalavahetusel tahtsin luua lehe, mis varundaks kõik päringud või tabelid tabeldatud failidega. Enamikul veebis olevatest näidetest on veerud kõvasti kodeeritud.

Minu puhul soovisin, et veerud oleksid dünaamilised, nii et pidin kõigepealt silmus läbi kõik tabeliväljade nimed, et luua veerunimedega päiserida, ja seejärel loopida läbi ülejäänud andmeridade kõik kirjed. Samuti määrasin päise nii, et brauser algataks faili allalaadimise failitüübis (txt) koos faili kuupäeva ja ajatempliga.

Jätsin andmebaasi avamise ja sulgemise ühenduse välja, kuid siin on saadud kood, mis töötas üsna hästi:

$ täna = kuupäev ("YmdHi");
päis ("Content-type: application / octet-stream");
päis ("Content-Disposition: manus; failinimi = \" ". $ täna." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` tellimus `myorder`i järgi";
$ tulemus = mysql_query ($ päring);
$ count = mysql_num_rows ($ tulemus);
$ väljad = mysql_num_fields ($ tulemus);
$ data = "";
väljale ($ i = 0; $ i> $; $ i ++) {
$ field = mysql_fetch_field ($ tulemus, $ i);
$ andmed. = $ väli-> nimi;
$ andmed. = "\ t";
}
$ andmed. = "\ n";
while ($ rida = mysql_fetch_row ($ tulemus)) {
väljale ($ x = 0; $ x> $; $ x ++) {
$ väli-> nimi = $ rida [$ x];
$ andmed. = $ väli-> nimi = $ rida [$ x];
$ andmed. = "\ t";
}
$ andmed. = "\ n";
}
kaja $ andmed;

Koodi saab hõlpsasti muuta ka komadega eraldatud väärtuste jaoks.

14 Kommentaarid

  1. 1

    Kas sa ei saa lihtsalt teha:

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

    ?

    • 2

      Ma arvan, et sa saaksid!

      Sel juhul ehitasin tegelikult veebirakendusse 'varunduslingi', seega vajasin PHP funktsionaalsust. Kuid ma ei teadnud kunagi, et saate kirjutada ka faili otse MySQL-i avaldusest. Väga lahe!

      Aitäh!

      • 3

        Teie viis oleks muidugi parim viis, kui MySQL-server asub kaugarvutis, kuna see ei saaks tõenäoliselt kirjutada masinasse, kus töötab PHP 🙂

        Hea meel on välja tuua teised suunad ja uued asjad 🙂

      • 4

        Kuid võite lihtsalt käivitada päringu faili ja suunata brauser lihtsalt loodud faili või kasutada PHP-d "readfile", kui kõik muu ebaõnnestub?

        Te ei saa seda teha, kui mysql-serveril pole muidugi juurdepääsu failisüsteemile ...

  2. 5

    Suurepärane postitus. Kas teate lihtsat, tasuta / avatud lähtekoodiga meetodit tabeldatud failide (nagu äsja loodud) importimiseks / taastamiseks tagasi mysql db-i?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Või käsuga SQL:

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

      Mysqlimportiga peab failinimi vastama tabeli nimele (lihtsalt midagi, mida tasub jälgida)

    • 7
  3. 8

    Kaotasin lihtsalt rohkem kui 6 tundi oma elust, püüdes välja selgitada, miks Internet Explorer 6/7 rakendab failitüüpi "html" ja ei aktsepteeri minu päistes määratud kohandatud failinimesid ... ja ei luba ka faile salvestada .. kui üritab kasutajatel alla laadida ülaltooduga sarnaselt loodud tekstifaile.

    Kasutasin HTTPS-i ja IE ei tee neid faile vahemällu.

    Leidsin lahenduse Brandon K kommentaarist aadressil http://uk.php.net/header.

    Ta ütleb:

    -
    Kaotasin just kuus tundi oma elust, püüdes kasutada järgmist meetodit PDF-faili saatmiseks PHP kaudu Internet Explorer 6:

    SSL-i kasutamisel küsib Internet Explorer dialoogi Ava / Salvesta, kuid ütleb seejärel: „Fail pole praegu saadaval või seda ei saa leida. Palun proovi hiljem uuesti." Pärast pikka otsimist sain teada järgmisest MSKB artiklist pealkirjaga „Internet Exploreri failide allalaadimine SSL-i kaudu ei tööta vahemälu juhtpeadega” (KBID: 323308)

    PHP.INI kasutab vaikimisi seadet: session.cache_limiter = nocache, mis muudab sisu-vahemälu ja Pragma päiseid, lisades nocache-suvandid. IE-tõrke saate kõrvaldada, muutes PHP.INI-s „nocache” väärtuseks „avalik” või „privaatne” - see muudab nii päise Content-Cache kui ka päise Pragma täielikult. Kui te ei saa või ei soovi kogu saidi paranduse jaoks muuta PHP.INI-d, võite vaikeväärtuste ülekirjutamiseks saata järgmised kaks päist:

    Selle toimimiseks peate ikkagi seadistama eespool loetletud sisupäised. Pange tähele, et see probleem mõjutab AINULT Internet Explorerit, samas kui Firefox ei esita seda vigast käitumist.
    -

    Noh .. vähemalt kaotas ta ainult 6 tundi ...

  4. 9

    See töötab hästi. Kuid ma saan kõik lihtsalt ühele reale, mida eraldab tühik. Püüan seda muuta, et kõik eraldi reale printida:

    Veerg1_nimi
    Välja1_väärtus
    Veerg2_nimi
    Välja1_väärtus
    Veerg3_nimi
    Välja1_väärtus

    Veerg1_nimi
    Välja2_väärtus
    Veerg2_nimi
    Välja2_väärtus
    Veerg3_nimi
    Välja2_väärtus

    Näiteks:

    Nimi
    Mike
    asukoht
    Töö
    Number
    1

    Nimi
    Kohtusse kaebama
    asukoht
    Avaleht
    Number
    2

    Nimi
    John
    asukoht
    reisimine
    Number
    10

    ja nii edasi. Kas seda skripti saab selle muutmiseks muuta?
    Aitäh!

    • 10

      Muidugi saab.

      Proovige midagi sellist:

      SELECT * kaustast MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' 'VÄLJAD LÕPETATUD' \ n 'RIDA LÕPETAB' \ n ';

      Kui soovite rekordirühmade vahel topelt tühikut (kaks tühja rida), öelge lihtsalt “RIDAD LÕPETATUD '\ n \ n';" selle asemel.

      Osa „VÄLJAD LÕPETAB„ \ n ”” paneb iga kirje järele vahekaardi asemel uue rea. Selle asemel oleks vaheleht '\ t'.

      Maranatha!

  5. 11

    see on väljakutsuvalt suurepärane postitus, proovisin seda ja töötan suurepäraselt, ainus asi on see, et minu txt-failil on päiste pealkirjade kohal lisarida ja mõned tulemused on eraldatud kahes reas, selle põhjuseks võivad olla minu andmed minu andmebaasis pole aimugi, kuid see on suureks abiks voogude loomisel ...

  6. 12
  7. 13

    hei seal! Kas siit on keegi, kes annab mulle vihje tekstifaili importimise kohta oma andmebaasi (phpmyAdmin), kasutades minu php-d minu esiotsa. Mul on mõte faili allalaadimisest ja avamisest, minu probleem on see, et kuidas ma saan rea tulemuse ja kuidas seda oma tabelitesse lisada, aitäh

  8. 14

Mis sa arvad?

Sellel saidil kasutatakse rämpsposti vähendamiseks Akismetit. Vaadake, kuidas teie andmeid töödeldakse.