使用php执行Postgres查询并使结果可下载


Using php to execute a Postgres query and make the result downloadable

我得到了一个查询,在一个场景中,我执行查询,它显示了数据和标题等表格式的结果…我想创建的第二个场景是一个直接下载链接,它将执行查询并将结果放入.csv文件中,以便在Excel中保存或打开。我已经有了显示的代码,但我想知道如何使它为用户下载。

下面是执行和显示的一小段代码。

    <?php
    $month = $_POST['mydate'];
    $monthfrm = date("Y-m-d", strtotime($month));
    $monthhd = date("F", strtotime($month));
    $monthto = date("Y-m-d", strtotime("$monthfrm . +1 month"));
    $date = date("F j,Y");
    if ($_POST['credsubmit']) {
       print('<head>');
       print('<link href="helper.css" media="screen" rel="stylesheet" type="text/css" />');
       print('<link href="dropdown.css" media="screen" rel="stylesheet" type="text/css" />');
       print('<link href="default.css" media="screen" rel="stylesheet" type="text/css" />');
    // Connecting, selecting database
       $dbconn = pg_connect("yeah we all know what goes here");
         if (!$dbconn) {
          die('Could not connect: ' . pg_last_error());
          }// Performing SQL query
     $query = "
       SELECT cm.'"ID'",a.'"ID'" as '"DDI'",cm.'"Date'",c.'"Amount'",ct.'"Name'" as '"Name'",cm.'"Comments'" as '"Comments'"
       FROM '"BIL_CreditMemo'" cm
       LEFT JOIN '"BIL_Credit'" c ON (c.'"ID'" = cm.'"BIL_CreditID'")
       LEFT JOIN '"ACT_Account'" a ON (c.'"ACT_AccountID'" = a.'"ID'")
       LEFT JOIN '"BIL_val_CreditMemoReason'" ct ON (ct.'"ID'" = cm.'"BIL_val_CreditMemoReasonID'")
       WHERE cm.'"Date'" >= '$monthfrm' AND cm.'"Date'" < '$monthto';
       ";
       $result = pg_query($query) or die('Query failed: ' . pg_last_error());
       // Printing results in HTML
       echo "<h2 align=center style=margin-top:20>Credit Memo Report for: $monthhd</h2>";
       echo "<table align=center width=60%>'n";
       print('<tr class="trstyle"><td>ID</td><td>DDI</td><td>Date</td><td>Amount</td><td>Name</td><td>Comments</td></tr>');
       while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
       echo "'t<tr>'n";
         foreach ($line as $col_value) {
           echo "'t't<td>$col_value</td>'n";
         }
       echo "'t</tr>'n";
      }
      echo "</table>'n";// Free resultset
      pg_free_result($result);// Closing connection
      pg_close($dbconn);
      }
      ?>

所以这就是我到目前为止得到的,想让结果直接下载到csv文件?如有任何帮助,不胜感激。

您需要设置几个HTTP标头,然后您只需回显CSV数据。例如,

<?php
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=test.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "Name,Favourite Colour'n";
echo "Phil,Blue'n";
?>

注意,如果你的目标是Excel,那么有一些库可以让你创建。xls文件;我很喜欢PHPExcel

  1. 使用header()函数告诉浏览器输出将是一个八位字节流。
  2. 使用fputcsv()将查询结果以CSV格式写入临时文件。
  3. 使用readfile()发送文件的内容。

或者,有一种方法可以使fputcsv()将其数据直接写入STDOUT,但这需要一点技巧,但它可以让您跳过使用临时文件。无论哪种方式,我都会阅读readfile()的示例,因为它将帮助您设置头文件以启动您正在寻找的"文件下载"。