如果我在mysql_query
命令中使用以下内容:
SELECT *
FROM mytable
INTO OUTFILE '/tmp/mytable.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';
答案 0 :(得分:3)
根据The Documentation On Select,它存储在服务器上而不是客户端上:
SELECT的SELECT ... INTO OUTFILE'file_name'形式将所选行写入文件。该文件在服务器主机上创建,因此您必须具有FILE权限才能使用此语法。 file_name不能是现有文件,除其他外,它会阻止/ etc / passwd和数据库表等文件被销毁。从MySQL 5.0.19开始,character_set_filesystem系统变量控制文件名的解释。
更重要的是:
SELECT ... INTO OUTFILE语句主要用于让您非常快速地将表转储到服务器计算机上的文本文件中。如果要在服务器主机之外的其他主机上创建生成的文件,通常无法使用SELECT ... INTO OUTFILE,因为无法相对于服务器主机的文件系统写入文件的路径。
因此,请勿在生产中使用它来生成CSV文件。相反,使用fputcsv
:
$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);
答案 1 :(得分:2)
tmp文件相对于哪个?
答:该文件将包含select * from mytable
的结果如果它不存在则会创建吗?
答:是的
如果我希望它从php文件中出现1个文件夹,那我该怎么办?
答:如果你想从fileYouAreRunning.php获取一个文件夹,那么创建如下路径:“../ mytable.csv”
答案 2 :(得分:0)
您当前的查询具有绝对路径。因此outfile不会相对于任何内容,而是保存到/tmp/mytable.csv
。
我会说,最安全的选择是继续使用绝对路径,因此请检查您的php是父路径的绝对路径,然后使用变量将其添加到查询中。