2011-01-24 84 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);