2011-11-22 208 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));