PHP in MySQL: izvoz poizvedbe v datoteko z razmejitvami z zavihki

mysql php logotipi

Ta vikend sem želel zgraditi stran, ki bi preprosto poizvedbo ali tabelo varnostno kopirala v datoteko z ločenimi zavihki. Večina primerov na internetu ima stolpce trdno kodirane.

V mojem primeru sem želel, da so stolpci dinamični, zato sem moral najprej prestaviti vsa imena polj tabele, da sem zgradil vrstico z glavo z imeni stolpcev, nato pa zaokrožiti skozi vse zapise za preostale podatkovne vrstice. Glavo sem nastavil tudi tako, da bo brskalnik sprožil prenos datoteke v vrsti datoteke (txt) z imenom datuma in časovnim žigom.

Izpustil sem odprto in zapiralno povezavo zbirke podatkov, toda tukaj je nastala koda, ki je delovala precej dobro:

$ danes = datum ("YmdHi");
glava ("Content-type: application / octet-stream");
glava ("Content-Disposition: priloga; ime datoteke = \" ". $ danes." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` vrstni red po `myorder`";
$ rezultat = mysql_query ($ poizvedba);
$ count = mysql_num_rows ($ rezultat);
$ polja = mysql_num_fields ($ rezultat);
$ podatkov = "";
za ($ i = 0; $ i> $ polja; $ i ++) {
$ polje = mysql_fetch_field ($ rezultat, $ i);
$ podatkov. = $ polje-> ime;
$ podatkov. = "\ t";
}
$ data. = "\ n";
medtem ko ($ vrstica = mysql_fetch_row ($ rezultat)) {
za ($ x = 0; $ x> $ polja; $ x ++) {
$ polje-> ime = $ vrstica [$ x];
$ data. = $ field-> name = $ row [$ x];
$ podatkov. = "\ t";
}
$ data. = "\ n";
}
echo $ data;

Kode lahko enostavno spremenite tudi za vrednosti, ločene z vejico.

14 Komentarji

  1. 1

    Ali ne morete kar storiti:

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

    ?

    • 2

      Predvidevam, da bi lahko!

      V tem primeru sem pravzaprav gradil povezavo za varnostno kopijo v spletni aplikaciji, zato sem potreboval funkcionalnost PHP. Nikoli pa nisem vedel, da lahko v datoteko pišete tudi neposredno iz izjave MySQL. Zelo kul!

      Hvala!

      • 3

        Vaša pot bi bila seveda najboljša, če bi bil strežnik MySQL na oddaljenem računalniku, saj verjetno ne bi mogel pisati na računalnik, v katerem se izvaja PHP 🙂

        Z veseljem opozorim na druga navodila in nove stvari though

      • 4

        Lahko pa preprosto poženete poizvedbo v datoteko in samo preusmerite brskalnik na ustvarjeno datoteko ali uporabite PHP-jevo "bralno datoteko", če vse drugo ne uspe?

        Tega ne boste mogli storiti, če strežnik mysql seveda nima dostopa do datotečnega sistema ...

  2. 5
    • 6

      Napaka ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Ali z ukazom SQL:

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

      Pri mysqlimport se mora ime datoteke ujemati z imenom tabele (le nekaj, na kar je treba paziti)

    • 7
  3. 8

    Pravkar sem izgubil več kot 6 ur svojega življenja, ko sem skušal ugotoviti, zakaj Internet Explorer 6/7 uporablja datotečni tip 'html' in ne sprejema mojih imen datotek po meri, določenih v glavah .. in tudi ne dovoli shranjevanja datotek .. ko poskuša uporabnike prenesti besedilne datoteke, ustvarjene na podoben način kot zgoraj.

    Uporabljal sem HTTPS in IE teh datotek ne shrani v predpomnilnik.

    Rešitev sem našel v komentarju Brandona K na http://uk.php.net/header.

    On reče:

    -
    Pravkar sem izgubil šest ur svojega življenja in poskušal uporabiti naslednjo metodo za pošiljanje datoteke PDF prek PHP v Internet Explorer 6:

    Pri uporabi SSL bo Internet Explorer pozval s pogovornim oknom Odpri / shrani, nato pa bo napisal: »Datoteka trenutno ni na voljo ali je ni mogoče najti. Prosim poskusite kasneje." Po dolgem iskanju sem spoznal naslednji članek MSKB z naslovom »Prenosi datotek Internet Explorerja prek SSL ne delujejo z glavami nadzora predpomnilnika« (KBID: 323308)

    PHP.INI privzeto uporablja nastavitev: session.cache_limiter = nocache, ki spreminja glave Content-Cache in Pragma tako, da vključuje možnosti »nocache«. Napako IE lahko odpravite tako, da v PHP.INI spremenite “nocache” v “public” ali “private” - s tem boste spremenili glavo Content-Cache in popolnoma odstranili glavo Pragma. Če ne morete ali ne želite spremeniti PHP.INI za popravek na celotnem spletnem mestu, lahko pošljete naslednji dve glavi, da prepišeta privzete vrednosti:

    Za to bo še vedno treba nastaviti glave vsebine, kot je navedeno zgoraj. Upoštevajte, da ta težava vpliva SAMO na Internet Explorer, medtem ko Firefox ne kaže tega napačnega vedenja.
    -

    No .. vsaj izgubil je le 6 ur ...

  4. 9

    To dobro deluje. Vendar dobim vse v eni vrstici, ločeni s presledkom. Poskušam ga spremeniti, da natisnem vse v ločeni vrstici, kot je ta:

    Stolpec1_ime
    Polje1_vrednost
    Stolpec2_ime
    Polje1_vrednost
    Stolpec3_ime
    Polje1_vrednost

    Stolpec1_ime
    Polje2_vrednost
    Stolpec2_ime
    Polje2_vrednost
    Stolpec3_ime
    Polje2_vrednost

    Na primer:

    Ime
    Mike
    lokacija
    delo
    Število
    1

    Ime
    sue
    lokacija
    Domov
    Število
    2

    Ime
    John
    lokacija
    Potovanja
    Število
    10

    in tako naprej. Ali je mogoče ta skript spremeniti, da to stori?
    Hvala!

    • 10

      Seveda lahko.

      Poskusite nekaj takega:

      SELECT * from MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' PODROČJA, KI JIH OBDLAŽI '\ n' VRSTE, KI JIH ODPRTO '\ n';

      Če želite dvojni presledek (dve prazni vrstici) med skupinami zapisov, samo izgovorite »LINES TERMINATED BY '\ n \ n';« namesto tega.

      Del „POLJA, KI JIH JE PRENEHALO '\ n'“ je tisto, kar po vsakem zapisu namesto zavihka postavi novo vrstico. Zavihek bi bil namesto tega \ \ t.

      Maranatha!

  5. 11

    to je kljubovalno odlična objava, preizkusil sem in dela odlično, edino to, da ima moja datoteka txt dodatno vrstico nad naslovi naslovov, nekateri rezultati pa so ločeni v 2 vrstici, to lahko povzročijo podatki, ki jih imam v moji zbirki podatkov ne vem, vendar je to v veliko pomoč pri ustvarjanju virov ...

  6. 12

    Douglas Karr vaša koda se resnično zanese! Zelo koristno je, če potrebujete samo izhod v obliki besedilne datoteke. Najlepša hvala! Od ekipe Filipini!

  7. 13

    živijo! Ali je kdo od tu, ki bi mi lahko dal namig o uvozu besedilne datoteke v mojo bazo podatkov (phpmyAdmin) z uporabo mojega php-ja kot prednjega dela. Imam idejo o prenosu datoteke in njenem odpiranju, moj problem je v tem, kako lahko dobim rezultat vrstice in kako ga vstavim v svoje tabele, hvala

  8. 14

Kaj menite?

Ta stran uporablja Akismet za zmanjšanje nezaželene pošte. Preberite, kako se vaš komentar obravnava.