【问题标题】:Mysql results not storing on a fileMysql结果未存储在文件中
【发布时间】:2026-02-04 04:55:02
【问题描述】:

我有一个 mysql 语句,我想将它获取的数据以制表符格式存储在 csv 文件中。我使用了以下语句,但是当我运行我的文件并且没有错误文件时,它没有创建和存储结果。

  $mytry =  "SELECT * FROM table WHERE `assigned` = '$id'
    INTO OUTFILE '/inactive/orders.csv'
    FIELDS TERMINATED BY ','
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n'";

    mysql_query($mytry);

或者有一种方法可以在不提示用户下载的情况下写入目录中的文件,这可行,但会提示

    $sQuery="SELECT * FROM table WHERE `assigned` = '$id'";

$rResult = mysql_query( $sQuery) or die();
$count = mysql_num_fields($rResult);

$html = '<table border="1"><thead><tr>%s</tr><thead><tbody>%s</tbody></table>';
$thead = '';
$tbody = '';
$line = '<tr>%s</tr>';
for ($i = 0; $i < $count; $i++){      
  $thead .= sprintf('<th>%s</th>',mysql_field_name($rResult, $i));
}


while(false !== ($row = mysql_fetch_row($rResult))){
  $trow = '';

  foreach($row as $value){
   $trow .= sprintf('<td>%s</td>', $value);
  }

  $tbody .= sprintf($line, $trow);

}


header("Content-type: application/vnd.ms-excel; name='excel'");
header("Content-Disposition: filename=exportfile.xls");
header("Pragma: no-cache");
header("Expires: 0");

print sprintf($html, $thead, $tbody);
exit;

【问题讨论】:

  • mysql_query 执行查询。您要存储查询本身还是它返回的数据?
  • 请记住,输出文件必须不存在,并且运行 MySQL 的用户对 MySQL 尝试将文件写入的目录具有写权限。
  • 是否有其他脚本可以用来写入文件而不提示用户下载
  • 是的,有办法。您必须直接从脚本写入文件。在下面阅读我的答案。
  • 您是在尝试将文件存储在客户端还是服务器上?第一个查询将其存储在服务器上,第二个查询将其下载到客户端。不能在不提示用户下载的情况下将文件放在客户端上,这将违反安全性。

标签: php mysql export-to-csv


【解决方案1】:

您可能想查看以下 PHP 函数:http://php.net/manual/en/function.fputcsv.php

使用您的查询获取数据,然后将其保存到变量中。然后,使用fputcsv 将数据存储到文件中。

另外,我不鼓励使用mysql_query,因为它现在已弃用(以及mysql_* 系列的其余部分)。此外,您的代码容易受到 SQL 注入攻击。阅读使用PDO for database interaction

更多推荐阅读,让您走上正轨:http://www.phptherightway.com/#databases

编辑:根据您在代码示例中显示的内容,您只需将 HTML 页面输出到浏览器,由于您设置了 Content-Disposition 标头,该页面会立即下载。

【讨论】: