2010-10-31 36 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这点我是不知道的。 :)