我有一个MySQL表格,记录了用户每天发送的消息日志。我想做的是每天将消息日志导出到文本文件中,并且不知道该如何实现。我们的服务器有phpMyAdmin,我可以手动将表格导出到一个文本文件中,但我不知道如何 A) 让phpMyAdmin每天自动导出这个文件,或者 B) 在PHP代码中编写导出代码。我希望导出的文件可以供我的网站用户下载。该网站使用的是PHP编写的。如果您需要任何其他信息来回答这个问题,请告诉我!
<?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);
?>
var_dump($row);
语句进行检查。 - EdoDodo除非您处理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 -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)) {
$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);
?>
这个脚本的主要问题是您没有选择数据库,也就是在“mysql_query”之前没有使用“mysql_select_db”。然后从“myTable(;)”中删除分号。还要在根文件夹中创建一个空白文本文件,这是您的数据存储的位置。之后您的脚本应该可以正常工作。这个解决方案是为了未来可能需要此脚本来帮助他们设计的用户而提供的。