PHP un MySQL: eksportējiet vaicājumu uz tabulas atdalītu failu

mysql php logotipi

Šajā nedēļas nogalē es gribēju izveidot lapu, kas visus vaicājumus vai tabulas vienkārši dublētu tabulēšanas atdalītajā failā. Lielākajai daļai piemēru tīklā kolonnas ir kodētas.

Manā gadījumā es vēlējos, lai kolonnas būtu dinamiskas, tāpēc man vispirms bija jāapgriež visi tabulas lauku nosaukumi, lai izveidotu galvenes rindu ar kolonnu nosaukumiem, un pēc tam veiciet visu pārējo datu rindu ierakstu izveidi. Es arī iestatīju galveni tā, lai pārlūks sāktu faila lejupielādi faila tipā (txt) ar faila datuma nosaukumu un laika zīmogu.

Es izlaidu datubāzes atvērto un aizvērto savienojumu, bet šeit ir iegūtais kods, kas darbojās diezgan labi:

$ šodien = datums ("YmdHi");
header ("Content-type: application / octet-stream");
header ("Content-Disposition: attachment; filename = \" ". $ today." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` pasūtījums pēc `myorder`";
$ rezultāts = mysql_query ($ vaicājums);
$ count = mysql_num_rows ($ rezultāts);
$ lauki = mysql_num_fields ($ rezultāts);
$ dati = "";
par ($ i = 0; $ i> $ lauki; $ i ++) {
$ field = mysql_fetch_field ($ rezultāts, $ i);
$ dati. = $ lauks-> nosaukums;
$ dati. = "\ t";
}
$ dati. = "\ n";
while ($ rinda = mysql_fetch_row ($ rezultāts)) {
priekš (laukiem $ x = 0; $ x> $; $ x ++) {
$ lauks-> nosaukums = $ rinda [$ x];
$ dati. = $ lauks-> nosaukums = $ rinda [$ x];
$ dati. = "\ t";
}
$ dati. = "\ n";
}
atbalss $ dati;

Kodu var viegli modificēt arī ar komatiem atdalītām vērtībām.

14 Komentāri

  1. 1

    Vai nevarat vienkārši darīt:

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

    ?

    • 2

      Es domāju, ka jūs varētu!

      Šajā gadījumā es faktiski izveidoju “rezerves” saiti tīmekļa lietojumprogrammā, tāpēc man vajadzēja PHP funkcionalitāti. Tomēr es nekad nezināju, ka jūs varat arī rakstīt failā tieši no MySQL paziņojuma. Ļoti foršs!

      Paldies!

      • 3

        Jūsu ceļš, protams, būtu labākais veids, ja MySQL serveris atrodas attālā datorā, jo tas, iespējams, nevarētu rakstīt mašīnā, kurā darbojas PHP 🙂

        Priecājos norādīt arī citus virzienus un jaunas lietas 🙂

      • 4

        Bet jūs varētu vienkārši palaist vaicājumu failā un vienkārši novirzīt pārlūkprogrammu uz ģenerēto failu, vai arī izmantot PHP “readfile”, ja viss pārējais neizdodas?

        Jūs to nevarēsiet izdarīt, ja mysql serverim, protams, nav piekļuves failu sistēmai ...

  2. 5

    Lielisks ieraksts. Vai jūs zināt vienkāršu, bezmaksas / atvērta koda metodi, kā importēt / atjaunot ar tabulēšanu norobežotu failu (tāpat kā jūs tikko izveidojāt) atpakaļ mysql db?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Vai arī ar komandu SQL:

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

      Izmantojot mysqlimport, faila nosaukumam ir jāatbilst tabulas nosaukumam (tikai tas, no kā jāuzmanās)

    • 7
  3. 8

    Es tikko zaudēju vairāk nekā 6 stundas savas dzīves, mēģinot noskaidrot, kāpēc pārlūkprogramma Internet Explorer 6/7 lieto faila tipu “html” un nepieņem manu galvenēs norādītos pielāgotos failu nosaukumus .. un arī neļauj failus saglabāt .. kad mēģina likt lietotājiem lejupielādēt teksta failus, kas izveidoti līdzīgā veidā kā iepriekš.

    Es izmantoju HTTPS, un IE šos failus nesaglabā kešatmiņā.

    Es atradu risinājumu Brandon K komentārā vietnē http://uk.php.net/header.

    Viņš saka:

    -
    Es tikko zaudēju sešas stundas savas dzīves, mēģinot izmantot šādu metodi, lai nosūtītu PDF failu, izmantojot PHP, uz Internet Explorer 6:

    Izmantojot SSL, programma Internet Explorer uzaicinās atvērt / saglabāt dialoglodziņu, bet pēc tam saka: “Fails pašlaik nav pieejams vai to nevar atrast. Lūdzu, pamēģiniet vēlreiz vēlāk." Pēc ilgas meklēšanas es uzzināju par šādu MSKB rakstu ar nosaukumu “Internet Explorer failu lejupielāde, izmantojot SSL, nedarbojas ar kešatmiņas vadības galvenēm” (KBID: 323308)

    Pēc noklusējuma PHP.INI izmanto iestatījumu: session.cache_limiter = nocache, kas modificē Content-Cache un Pragma galvenes, iekļaujot opcijas “nocache”. IE kļūdu var novērst, PHP.INI nomainot “nocache” uz “public” vai “private” - tas mainīs Content-Cache galveni, kā arī pilnībā noņems Pragma galveni. Ja nevarat vai nevēlaties modificēt PHP.INI vietnes labojumam, varat nosūtīt šādas divas galvenes, lai pārrakstītu noklusējumus:

    Lai tas darbotos, jums joprojām būs jāiestata iepriekš uzskaitītās satura galvenes. Lūdzu, ņemiet vērā, ka šī problēma ietekmē TIKAI pārlūkprogrammu Internet Explorer, savukārt Firefox neizpauž šo kļūdaino rīcību.
    -

    Nu .. vismaz viņš zaudēja tikai 6 stundas ...

  4. 9

    Tas darbojas labi. Tomēr man vienkārši viss ir vienā līnijā, kuru atdala atstarpe. Mēģinu to modificēt, lai visu izdrukātu atsevišķā rindiņā šādi:

    Kolonna1_nosaukums
    Lauks1_value
    Kolonna2_nosaukums
    Lauks1_value
    Kolonna3_nosaukums
    Lauks1_value

    Kolonna1_nosaukums
    Lauks2_value
    Kolonna2_nosaukums
    Lauks2_value
    Kolonna3_nosaukums
    Lauks2_value

    Piemēram:

    Vārds
    Slaistīties
    Adrese
    darbs
    Skaits
    1

    Vārds
    Iesūdzēt
    Adrese
    Sākums
    Skaits
    2

    Vārds
    John
    Adrese
    ceļot
    Skaits
    10

    un tā tālāk. Vai šo skriptu var modificēt, lai to izdarītu?
    Paldies!

    • 10

      Protams, var.

      Izmēģiniet kaut ko līdzīgu šim:

      SELECT * no MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' LAUKI, KAS PABEIGTI '\ n' LĪNIJAS, KAS PABEIGTAS '\ n';

      Ja vēlaties, lai starp ierakstu grupām būtu divkārša atstarpe (divas tukšas rindas), sakiet “LĪNIJAS, KAS PABEIGTAS '\ n \ n';” tā vietā.

      Daļa “LAUKAS, KAS IZBEIGA“ \ n ”ir tā, kas aiz katra ieraksta cilnes vietā ievieto jaunu rindu. Cilne tā vietā būtu “\ t”.

      Maranata!

  5. 11

    šī ir izaicinoši lieliska ziņa, es to izmēģināju un strādāju lieliski, vienīgais ir tas, ka manam txt failam virs galvenes virsrakstiem ir papildu rinda, un daži rezultāti ir sadalīti 2 rindās, tas var būt iemesls maniem datiem manā datu bāzē nav ne jausmas, bet tas ir liels palīgs, lai izveidotu plūsmas ...

  6. 12

    Douglas Karr tavs kods tiešām šūpojas! Tas ir īpaši noderīgi, ja jums vienkārši nepieciešama izeja, kas ir teksta faila formātā. Liels paldies! No komandas Filipīnas!

  7. 13

    Sveiks! Vai ir kāds no šejienes, kas man var dot mājienu par teksta faila importēšanu uz manu datu bāzi (phpmyAdmin), izmantojot manu php kā manu priekšējo daļu. Man ir ideja par faila lejupielādi un atvēršanu, mana problēma ir tā, kā es varu iegūt rindas rezultātu un kā to ievietot tabulās, paldies

  8. 14

Ko jūs domājat?

Šī vietne izmanto Akismet, lai samazinātu surogātpastu. Uzziniet, kā tiek apstrādāts jūsu komentārs.