PHP és MySQL: Lekérdezés exportálása tabulátorral elválasztott fájlba

mysql php logók

Ezen a hétvégén egy olyan oldalt szerettem volna létrehozni, amely egyszerűen bármilyen lekérdezést vagy táblázatot biztonsági másolatot készít egy tabulátorral tagolt fájlba. A neten található legtöbb példa az oszlopokat kemény kódolással látja el.

Az én esetemben azt akartam, hogy az oszlopok dinamikusak legyenek, ezért először át kellett hurkolnom az összes táblamező nevet, hogy felépítsem az oszlopnevekkel ellátott fejléc sort, majd a fennmaradó adatsorok összes rekordját körbejárjam. A fejlécet úgy is beállítottam, hogy a böngésző megkezdje a fájl letöltését a fájltípusban (txt) a fájl dátumának és időbélyegzőjének nevével.

Kihagytam az adatbázis nyitó és záró kapcsolatot, de itt van az eredményül kapott kód, amely elég jól működött:

$ ma = dátum ("YmdHi");
fejléc ("Content-type: application / octet-stream");
fejléc ("Content-Disposition: melléklet; fájlnév = \" ". $ ma." _ Backup.txt \ "");
$ query = "SELECT * FROM` mytable` sorrend `myorder` által";
$ eredmény = mysql_query ($ lekérdezés);
$ count = mysql_num_rows ($ eredmény);
$ mezők = mysql_num_fields ($ eredmény);
$ data = "";
for ($ i = 0; $ i> $ mezők; $ i ++) {
$ mező = mysql_fetch_field ($ eredmény, $ i);
$ adatok. = $ mező-> név;
$ data. = "\ t";
}
$ data. = "\ n";
while ($ row = mysql_fetch_row ($ result)) {
for ($ x = 0; $ x> $ mezők; $ x ++) {
$ mező-> név = $ sor [$ x];
$ adatok. = $ mező-> név = $ sor [$ x];
$ data. = "\ t";
}
$ data. = "\ n";
}
echo $ adatok;

A kód könnyen módosítható vesszővel elválasztott értékekre is.

14 Comments

  1. 1
    • 2

      Gondolom, megtehetné!

      Ebben az esetben tulajdonképpen egy „backup” linket építettem egy webalkalmazásban, így a PHP funkcionalitásra volt szükségem. Soha nem tudtam, hogy közvetlenül a MySQL utasításból is írhat fájlba. Nagyon cool!

      Köszönjük!

      • 3

        Természetesen az Ön módja lenne a legjobb módszer, ha a MySQL szerver távoli gépen van, mivel valószínűleg nem tudna írni arra a gépre, ahol a PHP fut 🙂

        Örülök, hogy rámutatok más irányokra és új dolgokra 🙂

      • 4

        De egyszerűen futtathatja a lekérdezést egy fájlba, és csak átirányíthatja a böngészőt a létrehozott fájlba, vagy használhatja a PHP „readfile” fájlját, ha minden más nem sikerül?

        Ezt nem fogja tudni megtenni, ha a mysql szervernek természetesen nincs hozzáférése a fájlrendszerhez ...

  2. 5

    Remek poszt. Ismer egy egyszerű, ingyenes / nyílt forráskódú módszert egy tabulátorral elválasztott fájl (például az imént létrehozott) fájljának visszaállítására / visszaállítására a mysql db-be?

    • 6

      Errr ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Vagy az SQL paranccsal:

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

      A mysqlimport használatakor a fájlnévnek meg kell egyeznie a táblázat nevével (csak arra kell figyelni)

    • 7
  3. 8

    Éppen több mint 6 órát vesztettem életemből, és megpróbáltam kideríteni, hogy az Internet Explorer 6/7 miért alkalmazta a 'html' fájltípust, és miért nem fogadta el a fejlécekben megadott egyéni fájlneveimet .. és nem engedte fájlok mentését .. amikor megpróbálja a felhasználókat letölteni a fentihez hasonló módon létrehozott szöveges fájlokat.

    HTTPS-t használtam, és az IE nem tárolja ezeket a fájlokat gyorsítótárban.

    A megoldást Brandon K megjegyzése alapján találtam a (z) címen http://uk.php.net/header.

    Mondja:

    -
    Életem hat óráját vesztettem el, amikor a következő módszerrel próbáltam PDF fájlt küldeni PHP-n keresztül az Internet Explorer 6-ba:

    SSL használatakor az Internet Explorer kéri a Megnyitás / Mentés párbeszédpanelt, de ezt követően azt mondja: „A fájl jelenleg nem érhető el, vagy nem található. Kérlek, próbáld újra később." Hosszas keresgélés után a következő MSKB cikkre lettem figyelmes: „Az Internet Explorer fájlok letöltése SSL-n keresztül nem működik a gyorsítótár-vezérlő fejlécekkel” (KBID: 323308)

    A PHP.INI alapértelmezés szerint egy olyan beállítást használ: session.cache_limiter = nocache, amely módosítja a Content-Cache és a Pragma fejléceket, hogy tartalmazzák a „nocache” opciókat. Az IE hibát kiküszöbölheti, ha a „nocache” szót „nyilvánosra” vagy „privátra” változtatja a PHP.INI fájlban. Ez megváltoztatja a Content-Cache fejlécet, és teljesen eltávolítja a Pragma fejlécet. Ha nem tudja vagy nem akarja módosítani a PHP.INI fájlt az egész webhelyre kiterjedő javításhoz, akkor a következő két fejlécet küldheti az alapértelmezések felülírására:

    Ennek működéséhez továbbra is be kell állítania a fent felsorolt ​​tartalomfejléceket. Felhívjuk figyelmét, hogy ez a probléma CSAK az Internet Explorert érinti, míg a Firefox nem mutatja ezt a hibás viselkedést.
    -

    Nos .. legalább csak 6 órát veszített ...

  4. 9

    Ez jól működik. Mindazonáltal mindent csak egy vonalon kapok, amelyeket szóköz választ el. Megpróbálom módosítani, hogy mindent különálló sorra nyomtassak:

    Oszlop1_név
    Field1_value
    Oszlop2_név
    Field1_value
    Oszlop3_név
    Field1_value

    Oszlop1_név
    Field2_value
    Oszlop2_név
    Field2_value
    Oszlop3_név
    Field2_value

    Például:

    Név
    Mikrofon
    Települések
    Munka
    Szám
    1

    Név
    Perel
    Települések
    Kezdőlap
    Szám
    2

    Név
    János
    Települések
    Utazás
    Szám
    10

    stb. Módosítható-e ez a szkript?
    Köszönjük!

    • 10

      Persze.

      Próbáljon ki valami ilyesmit:

      SELECT * a MyTableName-ből INTO OUTFILE-ba 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' '' \ n '' \ n 'MEGHATÁROZOTT VONALOK MEGHATÁROZOTT TERÜLETEK;

      Ha kettős szóközt (két üres sort) szeretne a rekordcsoportok között, akkor mondja ki a következőt: „A VONALOK MEGHATÁROZOTT \ '\ n'; helyette.

      A „TERÜLETEK VÉGZETT A„ \ n ”” rész az, ami új rekordot tesz minden rekord után, tab helyett. A tab helyett '\ t' lenne.

      Maranatha!

  5. 11

    ez dacosan nagyszerű bejegyzés, kipróbáltam és remekül működök, az egyetlen dolog, hogy a txt fájlomnak van egy extra sora a fejléc címe felett, és néhány eredmény 2 sorban van elválasztva, ezt okozhatják a rendelkezésemre álló adatok az adatbázisomban fogalmam sincs, de ez nagy segítség a hírcsatornák összeállításához ...

  6. 12

    Douglas Karr a kódod nagyon ringat! Különösen hasznos, ha csak textfájl formátumú kimenetre van szüksége. Nagyon köszönöm! A Fülöp-szigetek csapatától!

  7. 13

    Halihó! Van-e innen valaki, aki tippet adna egy szövegfájl importálásáról az adatbázisomba (phpmyAdmin), a php-t használva kezelőfelületként. Van egy ötletem egy fájl letöltésével és megnyitásával, az a problémám, hogy hogyan tudom megszerezni a sor eredményét és hogyan illesszem be a táblázataimba, köszönöm

  8. 14

Mit gondolsz?

Ez az oldal Akismet-et használ a levélszemét csökkentése érdekében. Ismerje meg, hogyan dolgozik a megjegyzésed.