如果我使用的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個文件夾,那我該怎麼做?
如果我使用的mysql_query
命令如下:PHP MySQL的OUTFILE命令
SELECT *
FROM mytable
INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
tmp文件相對於哪裏?
答:文件將有來自MYTABLE
選擇*的結果,如果它不存在將其產生的呢?
答:是的
如果我想它出現1個文件夾了從PHP文件,它這樣做,我將如何做呢?
答:如果你想在一個文件夾最多從fileYouAreRunning.php然後作出這樣的路徑:「../mytable.csv」
您當前的查詢有絕對路徑。所以outfile不會相對於任何東西,但保存到/tmp/mytable.csv
。
我會說,最安全的選擇是繼續使用絕對路徑,所以檢查你的php你父母的絕對路徑是什麼,然後用變量添加到你的查詢中。
據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);
你寫的路徑的方式是不是相對路徑。 – walkingTarget 2011-01-24 15:57:24