通过php将mysql数据导出为.csv的问题

通过php将mysql数据导出为.csv的问题,php,export-to-csv,Php,Export To Csv,我使用以下方法尝试将数据导出到csv文件,我使用的方法是从下面的链接,但当我尝试导出文件时,系统会答复我无法读取此类文件,因此我想问,在执行代码之前,我必须先预打开result.csv?或者文件result.csv已经生成,但是在错误的目录中,如果这是原因,请允许我询问如何定义应在其中创建文件的目录 $result = mysql_query("SELECT TechName, ClientName, SiteName, Time, Type

我使用以下方法尝试将数据导出到csv文件,我使用的方法是从下面的链接,但当我尝试导出文件时,系统会答复我无法读取此类文件,因此我想问,在执行代码之前,我必须先预打开result.csv?或者文件result.csv已经生成,但是在错误的目录中,如果这是原因,请允许我询问如何定义应在其中创建文件的目录

$result = mysql_query("SELECT TechName, ClientName, SiteName, Time, Type
                            INTO OUTFILE 'result.csv'
                            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED by '\"'
                            LINES TERMINATED BY '\n'
                            FROM Tech AS T, Client AS C, Site AS S, Log AS L
                            WHERE T.TechID=L.TechID AND C.ClientID=L.ClientID AND S.SiteID=L.SiteID
                            ORDER BY L.Time DESC");
    $Time = date('Y_m_d_H_i');
    $fileName = "Report_".$Time.".csv";
    header('Content-type: text/csv'); 
    header('Content-Disposition: attachment; filename="'.$fileName.'"'); 
    readfile('result.csv');

如果您试图输出查询结果,只需这样做。根本不需要
readfile()
。您所需要的只是已有的标题,以及用于输出CSV数据的内容


还请注意,您可以简单地使用
fputcsv()
将数组格式化为CSV行

试试这段代码可能是什么。在这里找到它:


您似乎正试图在此处“强制下载”result.csv文件。您的查询似乎未成功生成result.csv,因此您的错误提示您,没有此类文件。尝试在不使用outfile部分的情况下简化查询,并查看查询是否有效。此外,我认为您需要一个绝对路径和适当的权限才能成功写入输出文件。好的,让我尝试输出数据,看看是否可以首先从数据库中检索数据。我尝试过,它可以成功输出数据,似乎问题来自于要输出到csv文件的查询使用文件的绝对路径。。。选择。。。输入输出文件“/absolute/path/result.csv”。。。或者如果您使用的是windows输出文件“c:\absolute\path\result.csv”。还可以使用WAMP中内置的PHPMYADMIN调试查询。因此,这些行不是必需的,我的意思是“INTO OUTFILE”result.csv“字段以“,”结尾,也可以用“\”行括起来,以“\n”结尾“,以及如何输出数据,是通过在此处使用fputcsv函数实现的,但该方法似乎与我提到的方法完全不同before@user1502740,啊,对不起,我没有看到你用MySQL输出文件的地方。虽然你可以这样做,但我不推荐。至少,您需要提供该文件的完整路径。MySQL用户需要写访问权限,MySQL和web服务器必须在同一台服务器上,或者至少能够从同一个位置读/写。在我看来,用PHP获取数据并用
fputcsv()
输出要容易得多。耶,他们使用的是同一台服务器,就像我使用的wamp服务器一样,为了方便起见,我只使用root帐户登录数据库,所以应该可以,指定路径的方法是在文件名之前添加完整的路径?我不知道为什么,但它只是在HTML文件而不是csv文件上打印这些内容,我已将文件名指定为以下C:\wamp\www\export.csv,这有关系吗?
<?php
/*
 * PHP code to export MySQL data to CSV
 * http://salman-w.blogspot.com/2009/07/export-mysql-data-to-csv-using-php.html
 *
 * Sends the result of a MySQL query as a CSV file for download
 */

/*
 * establish database connection
 */

$conn = mysql_connect('MYSQL_HOST', 'MYSQL_USERNAME', 'MYSQL_PASSWORD') or die(mysql_error());
mysql_select_db('MYSQL_DATABASE', $conn) or die(mysql_error($conn));

/*
 * execute sql query
 */

$query = sprintf('SELECT * FROM MYSQL_TABLE');
$result = mysql_query($query, $conn) or die(mysql_error($conn));

/*
 * send response headers to the browser
 * following headers instruct the browser to treat the data as a csv file called export.csv
 */

header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename=export.csv');

/*
 * output header row (if atleast one row exists)
 */

$row = mysql_fetch_assoc($result);
if ($row) {
    echocsv(array_keys($row));
}

/*
 * output data rows (if atleast one row exists)
 */

while ($row) {
    echocsv($row);
    $row = mysql_fetch_assoc($result);
}

/*
 * echo the input array as csv data maintaining consistency with most CSV implementations
 * - uses double-quotes as enclosure when necessary
 * - uses double double-quotes to escape double-quotes 
 * - uses CRLF as a line separator
 */

function echocsv($fields)
{
    $separator = '';
    foreach ($fields as $field) {
        if (preg_match('/\\r|\\n|,|"/', $field)) {
            $field = '"' . str_replace('"', '""', $field) . '"';
        }
        echo $separator . $field;
        $separator = ',';
    }
    echo "\r\n";
}
?>