2011-11-22 210 views
0

我正在尝试将数据库查询写入文件,但我只是想知道如何将SQL数据输入到文件中。将数据库查询写入文件

目前它根本没有向.txt文件输出任何内容。我怀疑它与while循环有关,并且质疑它是否需要在那里。

我的代码是:

function backup_tables($host,$user,$pass,$name,$tables = '*') 
{ 

$link = mysql_connect($host,$user,$pass); 
mysql_select_db($name,$link); 

$query = "SELECT gamename, username, MAX(thescore) 
      FROM game_scores 
      GROUP BY gamename, username 
      ORDER BY gamename, thescore DESC"; 

$result = mysql_query($query); 

while($row = mysql_fetch_array($result)) { 
    $scoredata = $row; 
} 


//save file 
$handle = fopen('scores/games-backup'.'.txt','w+'); 
fwrite($handle,$scoredate); 
fclose($handle); 

echo "Success"; 
} 

上写SQL结果该文本文件的任何帮助,将不胜感激。

回答

2

$row是一个数组,您需要将它设置为一个字符串,然后才能将其写入文件,则可以使用implode()

$ scoredata也正在每个循环覆盖,也许使用$ scoredata [],而不是

while($row = mysql_fetch_array($result)) { 
    $scoredata[] = implode("; ", $row); 
} 

这将使$scoredata数组也,所以你需要将其转换成字符串呢!

$handle = fopen('scores/games-backup'.'.txt','w+'); 
fwrite($handle,implode("\r\n", $scoredata)); 
fclose($handle); 

这应该在文件的新行上打印每个数据库行。

编辑:这将只是一个文本文件,格式为文本,不是很好的备份文件。您需要将文本结构化为SQL格式才能使其有用。

+0

感谢@Jleagle获取上的fwrite行错误:)[function.implode]破灭(:警告坏参数上线27 – StuBlackett

+0

因为你有一个叫做$ scoredata,另一个叫$ scoredate – 472084

+0

非常感谢@Jaggle它不是备份文件。它将成为游戏成绩的快照,在一天中的特定时间作为一个cron作业。 – StuBlackett

2

$row不是一个字符串,您必须先将其设置为字符串,然后才能将其放入文件中。 而且您必须将$scoredata更改为$scoredata[],因为它现在被连续覆盖。

2

试着这么做:

$handle = fopen('scores/games-backup'.'.txt','w+'); 

while($row = mysql_fetch_array($result)) { 
    fputs($handle, join(';', $row)."\n"); 
} 

fclose($handle); 

$行是一个数组,你必须加入它(或访问元素)

1

可以使用print_r功能与设置为true第二个参数。

$str = print_r($row, true);  
fwrite($handle,implode("\r\n", $str)); 

或者你可以serialize阵列

$str = serialize($row); 
fwrite($handle,implode("\r\n", $str));