2011-01-24 86 views
2

如果我使用的mysql_query命令如下:PHP MySQL的OUTFILE命令

SELECT * 
FROM mytable 
INTO OUTFILE '/tmp/mytable.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 
  • 凡好歹到PHP文件相对于tmp文件,MySQL数据库?
  • 如果它不存在,它会被创建?
  • 如果我希望它从PHP文件中出现1个文件夹,那我该怎么做?
+0

你写的路径的方式是不是相对路径。 – walkingTarget 2011-01-24 15:57:24

回答

1

tmp文件相对于哪里?

答:文件将有来自MYTABLE

选择*的结果,如果它不存在将其产生的呢?

答:是的

如果我想它出现1个文件夹了从PHP文件,它这样做,我将如何做呢?

答:如果你想在一个文件夹最多从fileYouAreRunning.php然后作出这样的路径:“../mytable.csv”

0

您当前的查询有绝对路径。所以outfile不会相对于任何东西,但保存到/tmp/mytable.csv

我会说,最安全的选择是继续使用绝对路径,所以检查你的php你父母的绝对路径是什么,然后用变量添加到你的查询中。

3

The Documentation On Select,它存储在服务器上,而不是在客户端上:

的SELECT ... INTO OUTFILE“FILE_NAME” SELECT的形式选择的行写入一个文件。在服务器主机上创建文件,因此您必须具有FILE权限才能使用此语法。 file_name不能是现有的文件,除此之外,它可以防止/ etc/passwd和数据库表等文件被破坏。从MySQL 5.0.19开始,character_set_filesystem系统变量控制文件名的解释。

而且,更重要的是:

的SELECT ... INTO OUTFILE语句的目的主要是让你很快地转储一个表来在服务器上的文本文件。如果要在除服务器主机之外的其他主机上创建生成的文件,通常无法使用SELECT ... INTO OUTFILE,因为无法写入相对于服务器主机文件系统的文件路径。

因此,不要在生产中使用它来生成CSV文件。相反,使用fputcsv生成PHP中的CSV:

$result = $mysqli->query($sql); 
if (!$result) { 
    //SQL Error 
} 
$f = fopen('mycsv.csv', 'w'); 
if (!$f) { 
    // Could not open file! 
} 
while ($row = $result->fetch_assoc()) { 
    fputcsv($f, $row); 
} 
fclose($f);