Intereting Posts
symfony2 доступ к приватным файлам в качестве администратора Как правильно выбрать данные из нескольких таблиц с помощью соединений / подзапросов? (РНР-баз данных) В окне «Моя поп» отображается горизонтальный скроллер, как его удалить? Использовать пространство имен php внутри функции Как генерировать подобные случайные кривые? Соединение фильтра_состояния в wordpress PHP MySQL Multi-statement работает на моей веб-странице, но не на XAMPP .htaccess переписывание URL с помощью php Анализ комментариев PHP Doc в структуру данных Doxygen: как описать переменные-члены класса в php? Не удалось создать диаграмму Google с использованием данных таблицы MySQL в качестве источника данных PHP – подсчитать повторяющиеся значения в двухмерном массиве, а затем отобразить только уникальные значения со счетчиком «php.exe» не распознается как внутренняя или внешняя команда, операционная программа или командный файл Как вы находите самый глубокий узел (шаги) – Xpath – php – xml – Как я могу реализовать привилегии форума

Экспорт таблицы mysql в файл .txt или .doc с помощью PHP

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

Будьте осторожны с тем, чтобы катиться самостоятельно, если вы не обрабатываете такие вещи, как 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 .

 <?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); ?> 

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

 <? $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); ?> 

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

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

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

 <?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); ?>