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);
$ data. = $ field-> name;
$ дані. = "\ t";
}
$ дані. = "\ n";
while ($ row = mysql_fetch_row ($ result)) {
для ($ x = 0; $ x> $ полів; $ x ++) {
$ field-> name = $ row [$ x];
$ data. = $ field-> name = $ row [$ x];
$ дані. = "\ t";
}
$ дані. = "\ n";
}
echo $ data;

Код також можна легко змінити для значень, розділених комами.

14 Коментарі

  1. 1
    • 2

      Гадаю, ти міг!

      У цьому випадку я фактично будував резервне посилання у веб-програмі, тому функція PHP - це те, що мені потрібно. Однак я ніколи не знав, що ви також можете писати у файл безпосередньо з оператора MySQL. Дуже круто!

      Спасибо!

      • 3

        Звичайно, ваш спосіб був би найкращим, якщо сервер MySQL знаходиться на віддаленій машині, оскільки він, мабуть, не зможе писати на машину, де працює PHP 🙂

        Радий вказати на інші напрямки та нові речі, хоча 🙂

      • 4

        Але ви можете просто запустити запит до файлу і просто перенаправити браузер на сформований файл або скористатися PHP-файлом "readfile", якщо все інше не вдається?

        Ви не зможете цього зробити, якщо сервер mysql, звичайно, не має доступу до файлової системи ...

  2. 5

    Чудовий пост. Чи знаєте ви про простий, безкоштовний / відкритий метод імпортування / відновлення файлу, розділеного табуляцією (як ви щойно створили) назад у db mysql?

    • 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
    Поле1_значення
    Ім'я стовпця2
    Поле1_значення
    Ім'я стовпця3
    Поле1_значення

    Ім'я стовпця1
    Поле2_значення
    Ім'я стовпця2
    Поле2_значення
    Ім'я стовпця3
    Поле2_значення

    Наприклад:

    Назва
    Майк
    Місцезнаходження
    робота
    Номер
    1

    Назва
    Сью
    Місцезнаходження
    Головна
    Номер
    2

    Назва
    Джон
    Місцезнаходження
    подорож
    Номер
    10

    і так далі. Чи можна змінити цей сценарій, щоб це зробити?
    Спасибо!

    • 10

      Звичайно, може.

      Спробуйте щось подібне:

      ВИБЕРІТЬ * з MyTableName У ВИХІД «MyTableName_MySQL-TAB-DELIMITED-29JUN08.txt» ПОЛЯ, СКОРОЧЕНІ «\ n» РЯДКИ, ЗАКОНЧЕНІ «\ n»;

      Якщо ви хочете подвійний пробіл (два порожні рядки) між групами записів, просто скажіть “РЯДКИ, ПРИКОНАНІ '\ n \ n';” натомість.

      Частина „ПОЛЯ, ЩО ПРИКОНАЄТЬСЯ '\ n'” - це те, що ставить новий рядок після кожного запису, а не вкладку. Натомість вкладкою буде "\ t".

      Маранафа!

  5. 11

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

  6. 12

    Douglas Karr ваш код справді розгойдується! Це дуже корисно, особливо якщо вам просто потрібен результат у форматі текстових файлів. Дуже дякую! Від команди Філіппіни!

  7. 13

    привіт там! Чи є тут хтось, хто може дати мені підказку щодо імпорту текстового файлу до моєї бази даних (phpmyAdmin), використовуючи мій php як мій інтерфейс. У мене є ідея про завантаження файлу та його відкриття, моя проблема полягає в тому, як я можу отримати результат рядка і як вставити його в свої таблиці, дякую

  8. 14

Що ви думаєте?

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.