如果我使用的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