PHP и MySQL: Експортирайте заявка в файл с разделители с раздели

mysql php лога

Този уикенд исках да създам страница, която просто да архивира всяка заявка или таблица във файл с разделители. Повечето от примерите в мрежата имат строго кодирани колони.

В моя случай исках колоните да бъдат динамични, така че първо трябваше да прегледам всички имена на полетата на таблицата, за да изградя заглавния ред с имена на колони, а след това да прегледам всички записи за останалите редове с данни. Също така зададох заглавката, така че браузърът да инициира изтеглянето на файла във тип файл (txt) с името на датата на файла и времевата марка.

Оставих базата данни отворена и затваряща връзка, но ето полученият код, който работи доста добре:

$ днес = дата ("YmdHi");
заглавка ("Тип съдържание: приложение / октет-поток");
заглавка ("Content-Disposition: прикачен файл; име на файла = \" ". $ днес." _ Backup.txt \ "");
$ query = "ИЗБЕРЕТЕ * ОТ` mytable` поръчка по `myorder`";
$ резултат = mysql_query ($ заявка);
$ count = mysql_num_rows ($ резултат);
$ полета = mysql_num_fields ($ резултат);
$ данни = "";
за ($ i = 0; $ i> $ полета; $ i ++) {
$ поле = mysql_fetch_field ($ резултат, $ i);
$ данни. = $ field-> name;
$ данни. = "\ t";
}
$ данни. = "\ n";
докато ($ ред = mysql_fetch_row ($ резултат)) {
за ($ x = 0; $ x> $ полета; $ x ++) {
$ field-> name = $ row [$ x];
$ данни. = $ field-> name = $ row [$ x];
$ данни. = "\ t";
}
$ данни. = "\ n";
}
echo $ данни;

Кодът може лесно да бъде модифициран и за стойности, разделени със запетая.

14 Коментари

  1. 1
    • 2

      Предполагам, че бихте могли!

      В този случай всъщност изграждах „резервна“ връзка в уеб приложение, така че PHP функционалността е това, от което се нуждаех. Никога обаче не знаех, че можете също да пишете във файл директно от изявлението MySQL. Много яко!

      Благодаря!

      • 3

        Вашият начин, разбира се, би бил най-добрият начин, ако сървърът MySQL е на отдалечена машина, тъй като вероятно няма да може да пише на машината, където работи PHP 🙂

        Радвам се да посоча други насоки и нови неща, все пак 🙂

      • 4

        Но можете просто да стартирате заявката към файл и просто да пренасочите браузъра към генерирания файл или да използвате „readfile“ на PHP, ако всичко друго се провали?

        Няма да можете да направите това, ако сървърът на mysql няма достъп до файловата система, разбира се ...

  2. 5

    Страхотен пост. Знаете ли за лесен, безплатен / отворен метод за импортиране / възстановяване на файл с разделители (като току-що създаден) обратно в mysql db?

    • 6

      Грешка ... mysqlimport?

      mysqlimport database_name --local backup.txt

      Или с командата SQL:

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

      С mysqlimport името на файла трябва да съвпада с името на таблицата (просто нещо, за което да внимавате)

    • 7
  3. 8

    Току-що загубих повече от 6 часа от живота си, опитвайки се да разбера защо Internet Explorer 6/7 прилага файловия тип 'html' и не приема моите персонализирани имена на файлове, посочени в заглавията .. и също така не позволява да се запазват файлове .. опит да накарате потребителите да изтеглят текстови файлове, създадени по начин, подобен на горния.

    Използвах HTTPS и IE не кешира тези файлове.

    Решението намерих в коментар на Брандън К. в http://uk.php.net/header.

    Той казва:

    -
    Току-що загубих шест часа от живота си, опитвайки се да използвам следния метод за изпращане на PDF файл чрез PHP до Internet Explorer 6:

    Когато използвате SSL, Internet Explorer ще подкани с диалоговия прозорец Отваряне / запазване, но след това казва „Файлът в момента не е наличен или не може да бъде намерен. Моля, опитайте отново по-късно." След много търсене разбрах следната статия на MSKB, озаглавена „Изтеглянето на файлове в Internet Explorer през SSL не работи с заглавките за управление на кеша“ (KBID: 323308)

    PHP.INI по подразбиране използва настройка: session.cache_limiter = nocache, която модифицира заглавките Content-Cache и Pragma, за да включва опции „nocache“. Можете да премахнете грешката в IE, като промените „nocache“ на „public“ или „private“ в PHP.INI - Това ще промени заглавката Content-Cache, както и напълно ще премахне заглавката Pragma. Ако не можете или не искате да модифицирате PHP.INI за корекция в целия сайт, можете да изпратите следните две заглавки, за да презапишете настройките по подразбиране:

    Все пак ще трябва да зададете заглавките на съдържанието, както е изброено по-горе, за да работи това. Моля, обърнете внимание, че този проблем влияе САМО на Internet Explorer, докато Firefox не проявява това погрешно поведение.
    -

    Е .. поне той загуби само 6 часа ...

  4. 9

    Това работи добре. Аз обаче просто получавам всичко на една линия, разделена с интервал. Опитвам се да го модифицирам, за да отпечатам всичко на отделен ред по следния начин:

    Име на колона1
    Field1_value
    Име на колона2
    Field1_value
    Име на колона3
    Field1_value

    Име на колона1
    Field2_value
    Име на колона2
    Field2_value
    Име на колона3
    Field2_value

    Например:

    Име
    микрофон
    Местоположение:
    Работа
    Брой
    1

    Име
    Съдя
    Местоположение:
    Начало
    Брой
    2

    Име
    клозет
    Местоположение:
    пътуване
    Брой
    10

    и така нататък. Може ли този скрипт да бъде модифициран, за да го направи?
    Благодаря!

    • 10

      Със сигурност може.

      Опитайте нещо подобно:

      SELECT * от MyTableName INTO OUTFILE 'MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt' ПОЛЯ, ПРЕКРАТЕНИ ОТ '\ n' ЛИНИИ, ПРЕКРАТЕНИ ОТ '\ n';

      Ако искате двойно интервал (два празни реда) между групите записи, просто кажете „LINES TERMINATED BY '\ n \ n';“ вместо.

      Частта „ПОЛЯ, ПРЕКРАТЕНИ ОТ„ \ n ““ е тази, която поставя нов ред след всеки запис, вместо раздел. Разделът вместо това ще бъде „\ t“.

      Мараната!

  5. 11

    това е предизвикателно страхотен пост, опитах го и работи чудесно, единственото нещо е, че моят txt файл има допълнителен ред над заглавията на заглавията, а някои резултати са разделени на 2 реда, това може да се дължи на данните, които имам в моята база данни няма идея, но това е чудесна помощ за изграждане на емисии ...

  6. 12

    Douglas Karr вашият код наистина се люлее! Много е полезно особено, ако просто се нуждаете от изход, който е във формат на текстови файлове. Благодаря много! От екипа Филипини!

  7. 13

    хей там! Има ли някой от тук, който да ми даде подсказка за импортиране на текстов файл в моята база данни (phpmyAdmin), използвайки моя php като мой преден край. Имам идея за изтегляне на файл и отварянето му, проблемът ми е, че как мога да получа резултата от реда и как да го вмъкна в моите таблици, благодаря

  8. 14

    Моля, някой може ли да ми каже как да премахна реда на заглавката http над заглавията на заглавията

Какво мислите?

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните за коментарите ви.