PHP en MySQL: voer 'n navraag uit na 'n tabbladafgebakende lêer

mysql php logo's

Hierdie naweek wou ek 'n bladsy saamstel wat enige navraag of tabel in 'n Tab-begrensde lêer sou rugsteun. Die meeste voorbeelde op die internet het die kolomme hard gekodeer.

In my geval wou ek hê dat die kolomme dinamies moes wees, dus moes ek eers al die tabelveldname deurblaai om die kopreeks met kolomname op te bou en dan al die rekords vir die oorblywende datarye deur te loop. Ek het ook die opskrif so ingestel dat die blaaier die aflaai van die lêer in die filetype (txt) sal begin met die naam van die lêer se datum en die tydstempel.

Ek het die databasis oop- en sluitverbinding weggelaat, maar hier is die resulterende kode wat baie goed gewerk het:

$ vandag = datum ("YmdHi");
kop ("Content-type: application / octet-stream");
kop ("Content-Disposition: attachment; filename = \" ". $ vandag." _ Backup.txt \ "");
$ query = "SELECT * VANAF 'mytable` volgorde per' myorder '';
$ resultaat = mysql_query ($ navraag);
$ count = mysql_num_rows ($ resultaat);
$ velde = mysql_num_fields ($ resultaat);
$ data = "";
vir ($ i = 0; $ i> $ velde; $ i ++) {
$ veld = mysql_fetch_field ($ resultaat, $ i);
$ data. = $ veld-> naam;
$ data. = "\ t";
}
$ data. = "\ n";
terwyl ($ ry = mysql_fetch_row ($ resultaat)) {
vir ($ x = 0; $ x> $ velde; $ x ++) {
$ veld-> naam = $ ry [$ x];
$ data. = $ veld-> naam = $ ry [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
eggo $ data;

Die kode kan ook maklik aangepas word vir kommaskeide waardes.

14 Comments

  1. 1
    • 2

      Ek dink jy kan!

      In hierdie geval het ek eintlik 'n 'rugsteun'-skakel in 'n webtoepassing gebou, so die PHP-funksionaliteit is wat ek nodig het. Ek het egter nooit geweet dat u ook direk vanaf die MySQL-verklaring na 'n lêer kan skryf nie. Baie koel!

      Dankie!

      • 3

        U manier sal natuurlik die beste manier wees as die MySQL-bediener op 'n afgeleë masjien is, aangesien dit waarskynlik nie op die masjien kan skryf waar PHP loop nie 🙂

        Graag wys u wel ander rigtings en nuwe dinge 🙂

      • 4

        Maar u kan die navraag na 'n lêer uitvoer, en die blaaier net na die gegenereerde lêer herlei, of die "leesbestand" van PHP gebruik as alles anders misluk?

        U sal dit nie kan doen as die mysql-bediener natuurlik nie toegang tot die lêerstelsel het nie ...

  2. 5

    Goeie boodskap. Weet u van 'n maklike, gratis / oopbronmetode om 'n tab-afgebakende lêer (soos u pas geskep het) in die mysql db in te voer / te herstel?

    • 6

      Fout ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Of met die SQL-opdrag:

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

      Met mysqlimport moet die lêernaam ooreenstem met die tabelnaam (net iets om op te let)

    • 7
  3. 8

    Ek het net meer as 6 uur van my lewe verloor om te probeer uitvind waarom Internet Explorer 6/7 die filetype 'html' toepas en nie my aangepaste lêername wat in die opskrifte gespesifiseer is, aanvaar nie en ook nie toelaat dat lêers gestoor word nie. probeer om gebruikers te laat aflaai van tekslêers wat op dieselfde manier as hierbo geskep is.

    Ek het HTTPS gebruik en IE lê nie in die kas nie.

    Ek het die oplossing gevind op 'n opmerking van Brandon K by http://uk.php.net/header.

    Hy sê:

    -
    Ek het net ses uur van my lewe verloor deur die volgende metode te gebruik om 'n PDF-lêer via PHP na Internet Explorer 6 te stuur:

    As u SSL gebruik, sal Internet Explorer die Open / Save-dialoog vra, maar dan sê: "Die lêer is tans nie beskikbaar nie of kan nie gevind word nie. Probeer asseblief weer later." Na baie soekwerk het ek kennis geneem van die volgende MSKB-artikel getiteld "Internet Explorer-lêeraflaaie via SSL werk nie met die geheue van die geheue van die kas nie" (KBID: 323308)

    PHP.INI gebruik standaard 'n instelling: session.cache_limiter = nocache wat Content-Cache en Pragma-koptekste verander om 'nocache'-opsies in te sluit. U kan die IE-fout uitskakel deur "nocache" in "openbaar" of "privaat" te verander in PHP.INI - Dit sal die Content-Cache-opskrif verander en die Pragma-koptekst heeltemal verwyder. As u PHP.INI nie kan of wil aanpas vir 'n werfwydte nie, kan u die volgende twee opskrifte stuur om die standaardinstellings te oorskryf:

    U sal steeds die inhoudsopskrifte moet instel soos hierbo gelys om dit te laat werk. Let op dat hierdie probleem SLEGS Internet Explorer beïnvloed, terwyl Firefox nie hierdie gebrekkige gedrag toon nie.
    -

    Wel .. hy het darem net 6 uur verloor ...

  4. 9

    Dit werk goed. Ek kry egter net alles op een lyn geskei deur 'n spasie. Ek probeer dit verander om alles op 'n aparte reël soos volg te druk:

    Kolom1_naam
    Veld1_waarde
    Kolom2_naam
    Veld1_waarde
    Kolom3_naam
    Veld1_waarde

    Kolom1_naam
    Veld2_waarde
    Kolom2_naam
    Veld2_waarde
    Kolom3_naam
    Veld2_waarde

    Byvoorbeeld:

    Naam
    Mike
    plek
    Werk
    Nommer
    1

    Naam
    Sue
    plek
    Tuis
    Nommer
    2

    Naam
    John
    plek
    Reis
    Nommer
    10

    en so aan. Kan hierdie skrif verander word om dit te doen?
    Dankie!

    • 10

      Seker kan.

      Probeer so iets:

      KIES * uit MyTableName IN OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' VELDE BEËINDIG DEUR '\ n' LYNE BEËINDIG DEUR '\ n';

      As u 'n dubbele spasie (twee leë reëls) tussen rekordgroepe wil hê, sê net 'LYNE BEËINDIG MET' \ n \ n ';' in plaas daarvan.

      Die gedeelte "VELDE BEËINDIG MET '\ n'" is wat 'n nuwe reël na elke plaat plaas, in plaas van 'n oortjie. 'N Oortjie is eerder' \ t '.

      Maranatha!

  5. 11

    dit is beslis 'n goeie boodskap, ek het dit goed probeer en werk, die enigste ding is dat my txt-lêer 'n ekstra ry bo die titel van die kop het, en dat sommige resultate in twee rye geskei word, dit kan veroorsaak word deur die data wat ek het in my databasis geen idee nie, maar dit is 'n groot hulp om feeds te bou ...

  6. 12

    Douglas Karr jou kode klop regtig! Dit is baie handig, veral as u net 'n afvoer in tekstbestandformaat benodig. Baie dankie! Van die span Filippyne!

  7. 13

    haai daar! Is daar iemand hiervandaan wat my 'n wenk kan gee oor die invoer van 'n teksbestand na my databasis (phpmyAdmin) met behulp van my php as my voorkant. Ek het 'n idee om 'n lêer af te laai en oop te maak. My probleem is dat ek die ry-resultaat kan kry en hoe om dit in my tabelle in te voeg, dankie

  8. 14

Wat dink jy?

Hierdie webwerf gebruik Akismet om spam te verminder. Leer hoe jou opmerking verwerk is.