PHP en MySQL: Eksportearje in fraach nei in tabblêd ôfskieden bestân

mysql php-logo's

Dit wykein woe ik in pagina bouwe dy't elke fraach of tafel gewoan in reservekopy meitsje soe yn in bestân fan Tab Tab. De measte foarbylden op it net hawwe de kolommen hurd kodearre.

Yn myn gefal woe ik dat de kolommen dynamysk soene wêze, dat ik moast earst alle nammen fan 'e tabelfjilden trochlûke om de kopregel mei kolomnammen te bouwen, en dan alle records foar de oerbleaune gegevensrijen trochlûke. Ik set de koptekst ek yn sadat de browser de download fan it bestân sil begjinne yn it filetype (txt) mei de namme fan de bestânsdatum en de tiidstempel.

Ik haw de database iepen en sluten ferbining ferlitten, mar hjir is de resultearjende koade dy't frij goed wurke:

$ hjoed = datum ("YmdHi");
koptekst ("Content-type: application / octet-stream");
koptekst ("Ynhâld-Disposysje: taheaksel; bestânsnamme = \" ". $ hjoed." _ Backup.txt \ "");
$ query = "SELECT * FAN` mytable` folchoarder troch 'myorder' ";
$ resultaat = mysql_query ($ fraach);
$ count = mysql_num_rows ($ resultaat);
$ fjilden = mysql_num_fields ($ resultaat);
$ data = "";
foar ($ i = 0; $ i> $ fjilden; $ i ++) {
$ fjild = mysql_fetch_field ($ resultaat, $ i);
$ gegevens. = $ fjild-> namme;
$ data. = "\ t";
}
$ data. = "\ n";
wylst ($ rige = mysql_fetch_row ($ resultaat)) {
foar ($ x = 0; $ x> $ fjilden; $ x ++)
$ fjild-> namme = $ rige [$ x];
$ gegevens. = $ fjild-> namme = $ rige [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ gegevens;

De koade kin ek maklik oanpast wurde foar komma-skieden wearden.

14 Comments

  1. 1

    kinne jo net gewoan dwaan:

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

    ?

    • 2

      Ik tink dat jo koenen!

      Yn dit gefal boude ik eins in 'reservekopy' keppeling yn in webapplikaasje, dus de PHP-funksjonaliteit is wat ik nedich wie. Ik wist lykwols noait dat jo ek direkt kinne skriuwe nei in bestân fanút de MySQL-ferklearring. Hiel cool!

      Tank!

      • 3

        Jo manier soe fansels de bêste manier wêze as de MySQL-tsjinner op in masine op ôfstân is, om't it wierskynlik net kin skriuwe op 'e masine wêr't PHP rint 🙂

        Bliid te wizen út oare rjochtings en nije dingen al 🙂

      • 4

        Mar jo kinne de query gewoan útfiere nei in bestân, en de browser gewoan trochferwize nei it oanmakke bestân, of PHP's "lêsbestân" brûke as al it oare mislearret?

        Jo sille dat net kinne dwaan as de mysql-tsjinner gjin tagong hat ta it bestânsysteem fansels ...

  2. 5

    Great post. Kinne jo fan in maklike, fergese/iepen boarne metoade foar it ymportearjen/herstellen fan in troch ljepper skieden bestân (lykas jo krekt makke) werom yn 'e mysql db?

    • 6

      Errr... mysqlimport?

      mysqlimport database_name --local backup.txt

      Of mei it SQL kommando:

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

      Mei mysqlimport moat de triemnamme oerienkomme mei de tabelnamme (gewoan wat om op te passen)

    • 7
  3. 8

    Ik bin krekt mear as 6 oeren fan myn libben ferlern by it besykjen om út te finen wêrom't Internet Explorer 6/7 bestânstype 'html' tapasse en myn oanpaste bestânsnammen net akseptearre yn 'e kopteksten .. en ek net tastean dat bestannen wurde opslein besykjen om brûkers tekstbestannen te downloaden dy't makke binne op in fergelykbere manier as hjirboppe.

    Ik brûkte HTTPS en IE cache dizze bestannen net.

    Ik fûn de oplossing op in reaksje fan Brandon K at http://uk.php.net/header.

    Hy seit:

    -
    Ik bin krekt seis oeren fan myn libben ferlern by it besykjen fan de folgjende metoade om in PDF-bestân fia PHP nei Internet Explorer 6 te stjoeren:

    By it brûken fan SSL sil Internet Explorer freegje mei it dialoochfinster iepenje / bewarje, mar dan seit "It bestân is op it stuit net beskikber of kin net fûn wurde. Besykje it letter op 'e nij." Nei in protte sykjen waard ik bewust fan it folgjende MSKB-artikel mei de titel "Internet Explorer-bestândownloads oer SSL wurkje net mei de cache-kontrôlekoppen" (KBID: 323308)

    PHP.INI brûkt standert in ynstelling: session.cache_limiter = nocache dy't Content-Cache en Pragma-kopteksten feroaret om "nocache" opsjes op te nimmen. Jo kinne de IE-flater eliminearje troch "nocache" te feroarjen yn "iepenbier" of "privee" yn PHP.INI - Dit sil de Content-Cache-koptekst feroarje en ek de Pragma-koptekst folslein fuortsmite. As jo ​​PHP.INI net kinne of wolle wizigje foar in side-wide fix, kinne jo de folgjende twa kopteksten stjoere om standerts te oerskriuwen:

    Jo moatte de ynhâldkoppen noch ynstelle lykas hjirboppe neamd om dit te wurkjen. Tink derom dat dit probleem allinich effekt hat op Internet Explorer, wylst Firefox dit gebrekkige gedrach net fertoant.
    -

    No .. hy ferlear teminsten mar 6 oeren ...

  4. 9

    Dit wurket goed. Ik krij lykwols gewoan alles op ien rigel skieden troch in spaasje. Ik besykje it te feroarjen om alles op in aparte rigel te printsjen lykas dit:

    Column1_name
    Field1_wearde
    Column2_name
    Field1_wearde
    Column3_name
    Field1_wearde

    Column1_name
    Field2_wearde
    Column2_name
    Field2_wearde
    Column3_name
    Field2_wearde

    Bygelyks:

    namme
    Mike
    Lokaasje
    Wurk
    Nûmer
    1

    namme
    Sue
    Lokaasje
    Thús
    Nûmer
    2

    namme
    John
    Lokaasje
    Reizgje
    Nûmer
    10

    ensafuorthinne. Kin dit skript wizige wurde om it te dwaan?
    Tank!

    • 10

      Fansels kin.

      Besykje sokssawat:

      SELECT * from MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' FJELDEN BEËINDIGD FAN '\n' RIJLEN BEËINDIGD FAN '\n';

      As jo ​​in dûbele spaasje (twa lege rigels) wolle tusken recordgroepen, sis dan gewoan "LINES TERMINATED BY '\n\n';" ynstee.

      It diel "FIELD TERMINATED BY '\n'" is wat in nije rigel pleatst nei elk record, ynstee fan in ljepper. In ljepper soe ynstee '\t' wêze.

      Maranatha!

  5. 11

    dit is perfoarst in geweldige post, ik besocht it en wurket geweldich, it ienige ding is dat myn txt-bestân in ekstra rige boppe de kopteksten hat, en guon resultaten binne skieden yn 2 rigen, dit kin feroarsake wurde troch de gegevens dy't ik haw yn myn databank gjin idee, mar dit is in geweldige help om feeds te bouwen ...

  6. 12

    Douglas Karr dyn koade echt rocks! It is heul nuttich foaral as jo gewoan in útfier nedich binne yn tekstbestânformaat. Tige dank! Fan team Filipinen!

  7. 13

    hei dêr! Is d'r ien fan hjir dy't my in hint jaan kin oer it ymportearjen fan in tekstbestân nei myn databank (phpmyAdmin) mei myn php as myn frontend. Ik haw in idee oer it downloaden fan in bestân en it iepenjen, myn probleem is dat hoe't ik it rigeresultaat kin krije en hoe't ik it yn myn tabellen ynfoegje kin, tank

  8. 14

Wat tinksto?

Dizze side brûkt Akismet om spam te ferleegjen. Learje hoe't jo kommentaargegevens ferwurke wurde.