我有一个mysql表,用于记录用户每天发送的消息.我想要做的是每天将消息日志导出一次到文本文件中,我不知道如何做到这一点.我们的服务器有phpmyadmin,我可以手动将表导出到文本文件中,但我不知道如何A)让phpmyadmin每天自动导出一次这个文件,或者B)用PHP代码编写导出.我希望导出的文件可供我网站的用户下载.它用PHP编写的网站.如果还有其他信息需要回答这个问题,请告诉我!
小智 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);
?>
Run Code Online (Sandbox Code Playgroud)
自己动手时要小心,除非你处理 NULL、字符集等。
第一种选择:
<?php
$pdo = new PDO(...);
$results = $pdo->query("SELECT * FROM myTable INTO OUTFILE 'data.txt'");
$dummy = $result->fetchAll();
Run Code Online (Sandbox Code Playgroud)
data.txt 文件将写入 MySQL 服务器上。该目录必须可由 mysqld 进程的 uid 写入。它不会覆盖任何现有文件,并且要求您具有FILESQL 权限。
第二种选择:使用 mysqldump 输出到平面文本文件(如 @OMG Ponies 提到的):
mysqldump -t -T <directory> <database> <table>
Run Code Online (Sandbox Code Playgroud)
它的工作原理是这样的INTO OUTFILE,它需要在MySQL服务器主机上运行,并且该目录必须可由mysqld uid写入。
第三个选项:使用 mysql 客户端运行查询并输出文本:
mysql -B -e "SELECT * FROM MyTable" <database> > mytable.txt
Run Code Online (Sandbox Code Playgroud)
这可以在任何主机上运行,并且不需要特殊特权或目录权限。但 NULL 可能无法像 mysqldump 或INTO OUTFILE.