繁体   English   中英

没有错误,没有文件导出。 PHP MySQL转换为CSV

[英]No errors and no file exported. PHP MySQL to CSV

这是我的PHP代码,我知道SQL查询有效,我测试了该命令以在数据库的数据文件夹中找到新的CSV文件。 但是,当我使用MySQL在PHP中运行查询时,没有文件出现在任何地方。 能否请其他人为我指出正确的方向,或者告诉我我的代码有缺陷的地方?

<?php
  $host="localhost";
  $user="xxxx";
  $password="xxxx";
  $dbname="fbclients";

  $con = new mysqli($host, $user, $password, $dbname)
    or die ('Could not connect to the database server' . mysqli_connect_error());

  $query = "SELECT * INTO OUTFILE \"contacts10.csv\" FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM contacts";
  if ($stmt = $con->prepare($query)) {
    $stmt->execute();
    $stmt->bind_result($field1, $field2, $field3);
    while ($stmt->fetch()) {
      //printf("%s, %s\n", $field1, $field2, $field3);
    }
    $stmt->close();
  }
  //$con->close();
?>

转义引号。

它应该是INTO OUTFILE \\"contacts10.csv\\" 注意反斜杠,或使用单引号。

我不知道如何在没有错误的情况下运行。 这不是Perl,在这里-您不能仅仅假设字符串之外的contacts10.csv意味着某些东西。

替代方法:

将查询输出存储到数组中。 并将数组转换为CSV 它将正常工作。 我会向您建议以下代码。

  $host="localhost";
  $user="xxxx";
  $password="xxxx";
  $dbname="fbclients";

  $con = new mysqli($host, $user, $password, $dbname)
    or die ('Could not connect to the database server' . mysqli_connect_error());


  $query = "SELECT * FROM contacts";
  if ($stmt = $con->prepare($query)) {
header('Content-Type: text/csv; charset=UTF-8');
  header('Content-Disposition: attachment; filename=sample.csv');
  header('Pragma: no-cache');
  header('Expires: 0');
  $fp = fopen('php://output', 'w');
    $stmt->execute();
    $stmt->bind_result($field1, $field2, $field3);
    while ($stmt->fetch()) {
    fputcsv($fp, $field1);
    fputcsv($fp, $field2);
    fputcsv($fp, $field3);
    }
    $stmt->close();
  } 

  fclose($fp);
  exit();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM