2010-10-31 41 views
6

我想將控制檯中的「Select * FROM table1」的輸出保存到PHP中的文件中。MYSQL選擇到文件

什麼是最有效的方式來做到這一點在PHP?

編輯: 我想輸出是像控制檯中的類型ie。

+--------+--------+ 
| thing1 | thing2 | 
+--------+--------+ 
| item1a | item2a | 
| item1b | item2b | 
+--------+--------+ 

另外,我在想,PHP代碼應該是「EXEC(我正在尋找mysql命令)」。這是我的理解,mysql_fetch_array是緩慢的,我正在尋找一個簡單的輸出...所以它應該有可能以某種方式從控制檯做到這一點。 (感謝迄今的迴應!)

+0

請問爲什麼你需要它像控制檯格式化?這使得導入更加困難。你打算如何使用輸出? – webbiedave 2010-10-31 01:16:52

+0

這不是真的用於導入...這是用於打印/查看。這個輸出將被存儲在一個文本文件中,幾乎所有的瀏覽器/帶寬都可以被瀏覽,以防我個人的瀏覽器無法正常工作,或者他們的連接帶寬太差。此外,非常原始但足夠的打印輸出。 – Eugene 2010-10-31 01:26:27

+1

需要考慮的是CSV文件是大多數程序讀取的格式。它缺乏即時可讀性,可以加載到Excel或其他電子表格軟件中,這些軟件可以進一步過濾,隱藏欄目以防止出現可見性,排序和製圖。 – 2010-10-31 01:30:33

回答

9

你可以使用MySQL's INTO OUTFILE syntax - 這將產生一個逗號分隔值(CSV)的文本文件:

SELECT * 
    INTO OUTFILE '/tmp/result.txt' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
    FROM YOUR_TABLE; 

權限將文件寫入到指定的位置必須到位。

+1

再加上文件已經不存在了。作爲安全防範措施,MySQL不會覆蓋現有的文件。 – 2010-10-31 01:58:49

+0

只是爲了強調寫入/ tmp /是最不成問題的方法。我試圖寫入不同的位置,儘管給了mysql用戶所有權,但失敗了。 – KalenGi 2015-04-30 13:40:50

3

以什麼格式?如果你希望他們的製表符分隔,可以使用這樣的事情:

$r = mysql_query("SELECT * FROM table1"); 
$str = ''; 

while($row = mysql_fetch_assoc($r)) { 
    $str .= implode("\t", $row)."\n"; 
} 

file_put_contents('table1.txt', $str); 

或者,CSV:

$r = mysql_query("SELECT * FROM table1");  
$fp = fopen('table1.csv', 'w'); 

while($row = mysql_fetch_assoc($r)) { 
    fputcsv($fp, $row); 
} 

fclose($fp); 

或者,正如其他人所指出的,使用MySQL自己OUTFILE這點我是不知道的。 :)