我有一个mysql表,用于记录用户每天发送的消息。我想要做的是每天将消息日志导出一次到文本文件中,我不知道如何做到这一点。我们的服务器有phpmyadmin,我可以手动将表导出到文本文件中,但我不知道如何A)让phpmyadmin每天自动导出一次这个文件,或者B)用PHP代码编写导出。我希望导出的文件可供我网站的用户下载。它用PHP编写的网站。如果还有其他信息需要回答这个问题,请告诉我们!
答案 0 :(得分:5)
<?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);
?>
答案 1 :(得分:4)
这个简单的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);
?>
答案 2 :(得分:2)
小心自己滚动,除非你处理像NULL,字符集等的事情。
第一种选择:
<?php
$pdo = new PDO(...);
$results = $pdo->query("SELECT * FROM myTable INTO OUTFILE 'data.txt'");
$dummy = $result->fetchAll();
data.txt文件将写在MySQL服务器上。该目录必须可由mysqld进程的uid写入。它不会覆盖任何现有文件,并要求您具有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
这可以在任何主机上运行,并且不需要特殊权限或目录权限。但是可能无法像处理mysqldump或INTO OUTFILE
那样处理NULL。
答案 3 :(得分:0)
这个问题的主要问题是你没有选择数据库,即在“mysql_query”之前使用“mysql_select_db”。然后从“myTable(;)”中删除分号。还要在根文件夹中创建一个空白文本文件,这是存储数据的位置。之后脚本应该可以正常工作。此解决方案适用于可能需要此脚本来帮助其设计的未来用户。
答案 4 :(得分:0)
我之前发布的答案只有在一行中的最后一个字段值不等于同一行中的任何其他字段值时才能正常工作.Bcoz检查逗号分隔是基于最后一个字段值,现在它已更改最后一个领域指数。
如果你使用前面的代码,那么你不能在字段值附近得到正确的逗号分隔,该字段值等于该行中的最后一个字段值,其他方式代码也是正确的。
<?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);
?>