PHP at MySQL: I-export ang isang Query sa isang Tab na Delimited File

mga logo ng phnql php

Ngayong katapusan ng linggo nais kong bumuo ng isang pahina na simpleng mai-backup ang anumang query o talahanayan sa isang Tab Delimited file. Karamihan sa mga halimbawa sa net ay may mga haligi na naka-code nang husto.

Sa aking kaso, nais kong maging pabago-bago ang mga haligi kaya kinailangan kong i-loop muna ang lahat ng mga pangalan ng patlang ng talahanayan upang maitayo ang hilera ng header na may mga pangalan ng haligi, at pagkatapos ay i-loop ang lahat ng mga tala para sa natitirang mga hilera ng data. Itinakda ko rin ang header upang simulan ng browser ang pag-download ng file sa filetype (txt) na may pangalan ng petsa ng file at itinakdang oras.

Iniwan ko ang database na bukas at nagsasara ng koneksyon, ngunit narito ang nagresultang code na gumana nang maayos:

$ ngayon = petsa ("YmdHi");
header ("Uri ng nilalaman: application / octet-stream");
header ("Content-Disposition: attachment; filename = \" ". $ ngayon." _ Backup.txt \ "");
$ query = "SELECT * MULA sa` mytable` order ng `myorder`";
$ resulta = mysql_query ($ query);
$ count = mysql_num_rows ($ resulta);
$ mga patlang = mysql_num_fields ($ resulta);
$ data = "";
para sa ($ i = 0; $ i> $ mga patlang; $ i ++) {
$ patlang = mysql_fetch_field ($ resulta, $ i);
$ data. = $ patlang-> pangalan;
$ data. = "\ t";
}
$ data. = "\ n";
habang ($ row = mysql_fetch_row ($ resulta)) {
para sa ($ x = 0; $ x> $ mga patlang; $ x ++) {
$ field-> name = $ row [$ x];
$ data. = $ field-> name = $ row [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Ang code ay maaaring madaling mabago para sa mga pinaghihiwalay na halaga ng kuwit din.

14 Comments

  1. 1
    • 2

      Ipagpalagay ko na kaya mo!

      Sa kasong ito, talagang nagtatayo ako ng isang 'backup' na link sa isang web application, kaya ang pagpapaandar ng PHP ang kailangan ko. Gayunpaman, hindi ko alam na maaari ka ring sumulat sa isang file nang direkta mula sa pahayag ng MySQL. Sobrang cool!

      Salamat!

      • 3

        Ang iyong paraan ay syempre magiging pinakamahusay na paraan kung ang MySQL server ay nasa isang remote machine, dahil malamang na hindi ito makakasulat sa makina kung saan tumatakbo ang PHP

        Natutuwa upang ituro ang iba pang mga direksyon at bagong bagay bagaman 🙂

      • 4

        Ngunit maaari mo lamang patakbuhin ang query sa isang file, at i-redirect lang ang browser sa nabuong file, o gamitin ang "readfile" ng PHP kung nabigo ang lahat?

        Hindi mo magagawa iyon kung ang MySQL server ay walang access sa filesystem syempre ...

  2. 5

    Mahusay na post. Alam mo ba ang isang madali, libre / bukas na pamamaraan ng pag-import / pagpapanumbalik ng isang naka-delimit na file (tulad ng nilikha mo lamang) pabalik sa MySQL db?

    • 6

      Errr… MySQL?

      mysqlimport database_name --local backup.txt

      O sa utos ng SQL:

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

      Sa MySQL, ang filename ay kailangang tumugma sa pangalan ng talahanayan (isang bagay lamang na dapat abangan)

    • 7
  3. 8

    Nawala ko lamang ang higit sa 6 na oras ng aking buhay na sinusubukan na mag-ehersisyo kung bakit ang Internet Explorer 6/7 ay naglalapat ng filetype 'html' at at hindi tinatanggap ang aking pasadyang mga filename na tinukoy sa mga header .. at hindi rin pinapayagan na mai-save ang mga file .. kailan sinusubukang i-download ng mga gumagamit ang mga file ng teksto sa isang katulad na paraan sa itaas.

    Gumagamit ako ng HTTPS at hindi i-cache ng IE ang mga file na ito.

    Natagpuan ko ang solusyon sa isang komento ni Brandon K sa http://uk.php.net/header.

    Sabi niya:

    -
    Nawala lang ako ng anim na oras ng aking buhay na sinusubukan na gamitin ang sumusunod na pamamaraan upang magpadala ng isang PDF file sa pamamagitan ng PHP sa Internet Explorer 6:

    Kapag gumagamit ng SSL, ang Internet Explorer ay mag-uudyok gamit ang dialog na Buksan / I-save, ngunit pagkatapos ay sasabihing "Ang file ay kasalukuyang hindi magagamit o hindi mahanap. Subukang muli mamaya." Matapos ang labis na paghahanap ay nalaman ko ang sumusunod na Artikulo sa MSKB na pinamagatang "Ang mga pag-download ng file ng Internet Explorer sa SSL ay hindi gagana sa mga cache control header" (KBID: 323308)

    Ang PHP.INI bilang default ay gumagamit ng isang setting: session.cache_limiter = nocache na binabago ang mga header ng Content-Cache at Pragma upang isama ang mga pagpipiliang "nocache". Maaari mong alisin ang error sa IE sa pamamagitan ng pagbabago ng "nocache" sa "pampubliko" o "pribado" sa PHP.INI - Babaguhin nito ang header ng Content-Cache pati na rin ang ganap na aalisin ang header ng Pragma. Kung hindi mo o hindi mo nais na baguhin ang PHP.INI para sa isang pag-aayos sa buong site, maaari mong ipadala ang sumusunod na dalawang mga header upang mai-overlap ang mga default:

    Kakailanganin mo ring itakda ang mga header ng nilalaman tulad ng nakalista sa itaas upang gumana ito. Mangyaring tandaan ang problemang ito LAMANG mga epekto sa Internet Explorer, habang hindi ipinapakita ng Firefox ang maling pagkilos na ito.
    -

    Well .. atleast nawala lang siya ng 6 na oras ...

  4. 9

    Ito ay gumagana nang maayos. Gayunpaman, nakukuha ko lang ang lahat sa isang linya na pinaghiwalay ng isang puwang. Sinusubukan kong baguhin ito upang mai-print ang lahat sa isang hiwalay na linya tulad nito:

    Column1_name
    Field1_value
    Column2_name
    Field1_value
    Column3_name
    Field1_value

    Column1_name
    Field2_value
    Column2_name
    Field2_value
    Column3_name
    Field2_value

    Halimbawa:

    Pangalan
    Mayk
    lugar
    Trabaho
    Numero
    1

    Pangalan
    Idemanda
    lugar
    Tahanan
    Numero
    2

    Pangalan
    John
    lugar
    paglalakbay
    Numero
    10

    at iba pa. Maaari bang mabago ang script na ito upang magawa ito?
    Salamat!

    • 10

      Oo naman kaya.

      Subukan ang isang bagay tulad nito:

      PUMILI * mula sa MyTableName SA OUTOUT 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' Mga LALAKI NA NAKATAKDA NG '\ n' LINES NA Natapos NG '\ n';

      Kung nais mo ng isang dobleng puwang (dalawang walang laman na mga linya) sa pagitan ng mga pangkat ng record, sabihin lamang ang “LINES TERMINATED BY '\ n \ n';” sa halip

      Ang bahaging "FIELDS TERMINATED BY '\ n'" na bahagi ay naglalagay ng isang bagong linya pagkatapos ng bawat talaan, sa halip na isang tab. Ang isang tab ay '\ t' sa halip.

      Maranatha!

  5. 11

    ito ay mapanghamak na isang mahusay na post, sinubukan ko ito at gumagana nang mahusay, ang tanging bagay ay ang aking txt file ay may labis na hilera sa itaas ng mga pamagat ng header, at ang ilang mga resulta ay pinaghiwalay sa 2 mga hilera, maaaring ito ay sanhi ng data na mayroon ako sa aking Database walang ideya, ngunit ito ay isang malaking tulong upang bumuo ng mga feed ...

  6. 12

    Douglas Karr bato talaga ang code mo! Napaka-kapaki-pakinabang lalo na kung kakailanganin mo lamang ng isang output na nasa format na textfile. Maraming salamat! Mula sa team Philippines!

  7. 13

    Hoy, ikaw! Mayroon bang alinman mula dito na maaaring magbigay sa akin ng isang pahiwatig tungkol sa pag-import ng isang textfile sa aking database (phpmyAdmin) gamit ang aking php bilang aking front end. Mayroon akong ideya tungkol sa pag-download ng isang file at pagbubukas nito, ang aking problema ay kung paano ko makukuha ang resulta ng hilera at kung paano ito maipasok sa aking mga talahanayan, salamat

  8. 14

    Mangyaring maaari bang may magsabi sa akin kung paano alisin ang hilera ng header ng http sa itaas ng mga pamagat ng header

Ano sa tingin ninyo?

Ang site na ito ay gumagamit ng Akismet upang mabawasan ang spam. Alamin kung paano naproseso ang data ng iyong komento.