Экспорт таблицы MySQL в файл .txt или .doc с использованием PHP - PullRequest
5 голосов
/ 04 июля 2011

У меня есть таблица mysql, в которой хранится журнал сообщений, которые пользователи отправляют каждый день. То, что я хочу сделать, это экспортировать журнал сообщений один раз в день в текстовый файл, и я не уверен, как это сделать. На нашем сервере есть phpmyadmin, и я могу экспортировать таблицу в текстовый файл вручную, но я не знаю, как: а) заставить phpmyadmin автоматически экспортировать этот файл один раз в день, или б) записать экспорт в коде php. Я хочу, чтобы экспортированные файлы были доступны пользователям моего сайта для скачивания. На сайте написано в php. Если вам нужна другая информация, чтобы ответить на этот вопрос, дайте мне знать!

Ответы [ 5 ]

5 голосов
/ 10 октября 2012
<?php
    $fh = fopen('data.txt', 'w');
    $con = mysql_connect("localhost","root","");
    mysql_select_db("db_name", $con);

    /* insert field values into data.txt */

    $result = mysql_query("SELECT * FROM table_name");   
    while ($row = mysql_fetch_array($result)) {          
        $last = end($row);          
        $num = mysql_num_fields($result) ;    
        for($i = 0; $i < $num; $i++) {            
            fwrite($fh, $row[$i]);                      
            if ($row[$i] != $last)
               fwrite($fh, ", ");
        }                                                                 
        fwrite($fh, "\n");
    }
    fclose($fh);
?>
4 голосов
/ 04 июля 2011

Этот простой PHP-скрипт сохранит все данные в таблице в текстовый файл.Записи будут разделены новыми строками, а поля - символом табуляции.Вот оно:

<?
$fh = fopen('data.txt', 'w');
mysql_connect('host', 'username', 'password');
$result = mysql_query("SELECT * FROM myTable;");
while ($row = mysql_fetch_array($result)) {
    $last = end($row);
    foreach ($row as $item) {
        fwrite($fh, $item);
        if ($item != $last)
            fwrite($fh, "\t");
    }
    fwrite($fh, "\n");
}
fclose($fh);
?>
2 голосов
/ 04 июля 2011

Будьте осторожны при развертывании своих действий, если только вы не обрабатываете такие вещи, как NULL, наборы символов и т. Д.

Первая альтернатива:

<?php
$pdo = new PDO(...);
$results = $pdo->query("SELECT * FROM myTable INTO OUTFILE 'data.txt'");
$dummy = $result->fetchAll(); 

Файл data.txt будет записан на сервере MySQL. Каталог должен быть доступен для записи с помощью uid процесса mysqld. Он не будет перезаписывать ни один из существующих файлов и требует наличия у вас привилегии FILE SQL.

Второй вариант: используйте mysqldump для вывода в плоский текстовый файл (как упоминалось @OMG Ponies):

mysqldump -t -T <directory> <database> <table>

Это работает как INTO OUTFILE, оно должно быть запущено на хосте сервера MySQL, и каталог должен быть доступен для записи с помощью mysqld uid.

Третий вариант: выполнить запрос с клиентом mysql и вывести текст:

mysql -B -e "SELECT * FROM MyTable" <database> > mytable.txt

Это может быть выполнено на любом хосте, и не требует никаких специальных привилегий или разрешений каталога. Но NULL не может быть обработан, как это было бы с mysqldump или INTO OUTFILE.

0 голосов
/ 22 ноября 2012

Ответ, который я опубликовал ранее, будет отлично работать, только когда последнее значение поля в строке не равно никакому другому значению поля в той же строке. Поскольку проверка на разделение запятыми основана на последнем значении поля, теперь оно изменилосьдо последнего индекса поля.

Если вы используете предыдущий код, то вы не можете получить правильное разделение запятой рядом со значением поля, которое равно последнему значению поля в этой строке, в противном случае код также является правильным.

<?php
    $fh = fopen('data.txt', 'w');
    $con = mysql_connect("localhost","root","");
    mysql_select_db("db_name", $con);

    /* insert field values into data.txt */

    $result = mysql_query("SELECT * FROM table_name");   
    while ($row = mysql_fetch_array($result)) {          
        $num = mysql_num_fields($result) ;    
        $last = $num - 1;
        for($i = 0; $i < $num; $i++) {            
            fwrite($fh, $row[$i]);                       
            if ($i != $last) {
                fwrite($fh, ",");
            }
        }                                                                 
        fwrite($fh, "\n");
    }
    fclose($fh);
?>
0 голосов
/ 08 февраля 2012

Ну, главная проблема с этим скриптом в том, что вы не выбрали базу данных, то есть использовали «mysql_select_db» перед «mysql_query».Затем удалите точку с запятой из «myTable (;)».Также создайте пустой текстовый файл в вашей корневой папке, где ваши данные будут храниться. После этого ваш скрипт должен работать нормально.Это решение предназначено для будущих пользователей, которым может понадобиться этот скрипт для облегчения их разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...