PHP ja MySQL: Vie kysely sarkaimilla erotettuun tiedostoon

mysql php -logot

Tänä viikonloppuna halusin rakentaa sivun, joka yksinkertaisesti varmuuskopioisi kaikki kyselyt tai taulukot välilehdillä erotetuksi tiedostoksi. Suurimmalla osalla verkon esimerkkejä sarakkeet on koodattu kovalla koodilla.

Minun tapauksessani halusin sarakkeiden olevan dynaamisia, joten minun piti ensin käydä läpi kaikki taulukon kenttänimet rakentaaksesi otsikkorivin sarakkeiden nimillä ja sitten silmukoiden läpi kaikki jäljellä olevien tietorivien tietueet. Asetin myös otsikon siten, että selain aloittaa tiedoston lataamisen tiedostotyypissä (txt) tiedoston päivämäärän ja aikaleiman kanssa.

I left out the database open and closing connection, but here’s the resulting code that worked quite well:

$ tänään = päivämäärä ("YmdHi");
otsikko ("Sisältötyyppi: sovellus / oktettivirta");
header ("Content-Disposition: liite; tiedostonimi = \" ". $ tänään." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` -järjestys `myorder`-toiminnolla ';
$ result = mysql_query ($ kysely);
$ count = mysql_num_rows ($ tulos);
$ kentät = mysql_num_fields ($ tulos);
$ data = "";
kohteelle ($ i = 0; $ i> $; $ i ++) {
$ field = mysql_fetch_field ($ tulos, $ i);
$ data. = $ field-> nimi;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ rivi = mysql_fetch_row ($ tulos)) {
varten ($ x = 0; $ x> $ -kentät; $ x ++) {
$ field-> nimi = $ rivi [$ x];
$ data. = $ field-> nimi = $ rivi [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Koodi voidaan helposti muokata myös pilkuilla erotetuille arvoille.

14 Kommentit

  1. 1

    Etkö voi vain tehdä:

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

    ?

    • 2

      Luulen, että voisit!

      Tässä tapauksessa olin itse rakentamassa varmuuskopiointilinkkiä verkkosovellukseen, joten tarvitsin PHP-toimintoja. En kuitenkaan koskaan tiennyt, että voit kirjoittaa myös tiedostoon suoraan MySQL-käskystä. Todella siistiä!

      Kiitos!

      • 3

        Sinun tapasi olisi tietysti paras tapa, jos MySQL-palvelin on etäkoneessa, koska se ei todennäköisesti pysty kirjoittamaan koneelle, jossa PHP on käynnissä 🙂

        On ilo mainita muita ohjeita ja uusia asioita 🙂

      • 4

        Mutta voit vain suorittaa kyselyn tiedostoon ja vain ohjata selaimen luotuun tiedostoon tai käyttää PHP: n "readfile" -ohjelmaa, jos kaikki muu epäonnistuu?

        Et voi tehdä sitä, jos mysql-palvelimella ei ole tietenkään pääsyä tiedostojärjestelmään ...

  2. 5

    Upea viesti. Tiedätkö helpon, ilmaisen / avoimen lähdekoodin, jolla tuodaan / palautetaan sarkaimilla erotettu tiedosto (kuten juuri luonut) takaisin mysql db: ään?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Tai SQL-komennolla:

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

      Kun mysqlimport on käytössä, tiedostonimen on vastattava taulukon nimeä (vain jotain mitä pitää varoa)

    • 7
  3. 8

    Menetin juuri yli 6 tuntia elämästäni yrittäessäni selvittää, miksi Internet Explorer 6/7 käytti tiedostotyyppiä "html" eikä hyväksynyt otsikoissa määritettyjä mukautettuja tiedostonimiäni. yritetään saada käyttäjät lataamaan tekstitiedostoja, jotka on luotu samalla tavalla kuin yllä.

    Käytin HTTPS: ää, ja IE ei tallenna näitä tiedostoja välimuistiin.

    Löysin ratkaisun Brandon K: n kommentista osoitteessa http://uk.php.net/header.

    Hän sanoo:

    -
    Menetin juuri kuusi tuntia elämästäni yrittäessäni käyttää seuraavaa tapaa lähettää PDF-tiedosto PHP: n kautta Internet Explorer 6: een:

    Kun käytät SSL: ää, Internet Explorer kysyy Avaa / Tallenna-valintaikkunaa, mutta sanoo sitten: "Tiedosto ei ole tällä hetkellä käytettävissä tai sitä ei löydy. Yritä uudelleen myöhemmin." Paljon hakujen jälkeen sain tietää seuraavasta MSKB: n artikkelista: "Internet Explorerin tiedostojen lataaminen SSL: n kautta ei toimi välimuistin ohjausotsikoiden kanssa" (KBID: 323308)

    PHP.INI käyttää oletusarvoisesti asetusta: session.cache_limiter = nocache, joka muuttaa Sisältö-välimuisti- ja Pragma-otsikot sisällyttämään nocache-asetukset. Voit poistaa IE-virheen vaihtamalla "nocache" -asetukseksi "public" tai "private" PHP.INI-sovelluksessa - Tämä muuttaa Content-Cache-otsikkoa ja poistaa kokonaan Pragma-otsikon. Jos et voi tai et halua muokata PHP.INI: tä koko sivuston kattavalle korjaukselle, voit lähettää seuraavat kaksi otsikkoa korvaamaan oletukset:

    Sinun on silti määritettävä yllä luetellut sisältöotsikot, jotta tämä toimisi. Huomaa, että tämä ongelma vaikuttaa VAIN Internet Exploreriin, vaikka Firefoxilla ei ole tätä virheellistä käyttäytymistä.
    -

    No .. ainakin hän menetti vain 6 tuntia ...

  4. 9

    Tämä toimii hyvin. Saan kuitenkin kaiken vain yhdellä rivillä erotettuna välilyönnillä. Yritän muokata sitä tulostamaan kaiken erilliselle riville näin:

    Sarake1_name
    Kenttä1_arvo
    Sarake2_name
    Kenttä1_arvo
    Sarake3_name
    Kenttä1_arvo

    Sarake1_name
    Kenttä2_arvo
    Sarake2_name
    Kenttä2_arvo
    Sarake3_name
    Kenttä2_arvo

    Esimerkiksi:

    Nimi
    mikrofoni
    Sijainti
    Referenssit
    numero
    1

    Nimi
    Haastaa oikeuteen
    Sijainti
    Etusivu
    numero
    2

    Nimi
    Johannes
    Sijainti
    Matkustaa
    numero
    10

    ja niin edelleen. Voiko tätä komentosarjaa muokata tekemään sen?
    Kiitos!

    • 10

      Toki voi.

      Kokeile jotain tällaista:

      Valitse * MyTableName-tiedostosta OUTFILE-tiedostoon 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' KENTTÄT, JOTKA PÄÄTTYVÄT \ n 'RIVIT LOPETETTU' \ n ';

      Jos haluat kaksinkertaisen välilyönnin (kaksi tyhjää riviä) tietoryhmien väliin, sano "LINET TERMINATED BY '\ n \ n';" sen sijaan.

      "KENTTÄT LOPETETTU" \ n "-osa on se, mikä lisää uuden rivin jokaisen tietueen jälkeen välilehden sijaan. Välilehti olisi sen sijaan '\ t'.

      Maranatha!

  5. 11

    tämä on uhmakkaasti hyvä viesti, yritin sitä ja toimin hienosti, ainoa asia on, että txt-tiedostollani on ylimääräinen rivi otsikkojen otsikoiden yläpuolella, ja jotkut tulokset on erotettu 2 riviin, tämä voi johtua omistamistani tiedoista tietokannassani ei ole aavistustakaan, mutta tämä on suuri apu syötteiden luomiseen ...

  6. 12

    Douglas Karr koodisi todella rokkaa! Se on erittäin hyödyllinen erityisesti, jos tarvitset vain tekstitiedostomuodon. Kiitos paljon! Joukkueelta Filippiinit!

  7. 13

    Hei siellä! Onko täältä ketään, joka voi antaa minulle vihjeen tekstitiedoston tuomisesta tietokantaani (phpmyAdmin) käyttämällä php: täni käyttöliittymänä. Minulla on idea tiedoston lataamisesta ja avaamisesta, ongelmani on, että kuinka saan rivin tuloksen ja kuinka lisätä sen taulukoihini, kiitos

  8. 14

Mitä mieltä olet?

Tämä sivusto käyttää Akismetiä roskapostin vähentämiseksi. Lue, miten kommenttitietosi käsitellään.