在PHP中将来自不同表的MySQL查询下载为csv

时间:2015-09-29 04:10:50

标签: php mysql csv

我有两张表如下:

表1(TRIPLE_COGNAC)

TRIPLE_ID,PDB_ID,FIRST_RESIDUE,FIRST_CHAIN,SECOND_RESIDUE,SECOND_CHAIN,THIRD_RESIDUE,THIRD_CHAIN,SEQUENCE
TCOG_98084,3oww,A64,B,G7,A,C82,A,AGC
TCOG_98085,3oww,G84,B,A41,A,G62,A,GAG
TCOG_98086,3oww,G7,B,A64,A,C39,A,GAC
TCOG_98087,3oww,U69,A,C70,A,G35,A,UCG
TCOG_98088,3oww,G32,A,A71,A,A34,A,GAA
TCOG_98089,3oww,A11,A,G73,A,C30,A,AGC
TCOG_98090,3oww,A41,B,G84,A,C5,A,AGC
TCOG_98091,3oww,C82,B,G7,B,A64,A,CGA
...
...
...

表2(QUAD1_COGNAC)

QUAD1_39435,3oww,C39,B,A64,B,G7,A,C82,A,CAGC
QUAD1_39436,3oww,C5,B,G84,B,A41,A,G62,A,CGAG
QUAD1_39437,3oww,C82,B,G7,B,A64,A,C39,A,CGAC
QUAD1_39438,3oww,G62,B,A41,B,G84,A,C5,A,GAGC
...
...
...

我想使用PHP下载表1和表2中的行PDB_ID = 3oww作为csv文件。我能够这样做,但输出页面不是我想要的当前输出是:

TRIPLE_ID,PDB_ID,FIRST_RESIDUE,FIRST_CHAIN,SECOND_RESIDUE,SECOND_CHAIN,THIRD_RESIDUE,THIRD_CHAIN,SEQUENCE
TCOG_98084,3oww,A64,B,G7,A,C82,A,AGC
TCOG_98085,3oww,G84,B,A41,A,G62,A,GAG
TCOG_98086,3oww,G7,B,A64,A,C39,A,GAC
TCOG_98087,3oww,U69,A,C70,A,G35,A,UCG
TCOG_98088,3oww,G32,A,A71,A,A34,A,GAA
TCOG_98089,3oww,A11,A,G73,A,C30,A,AGC
TCOG_98090,3oww,A41,B,G84,A,C5,A,AGC
TCOG_98091,3oww,C82,B,G7,B,A64,A,CGA

<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by       (output started at /Applications/XAMPP/xamppfiles/htdocs/interrna/download-     test.php:48) in <b>/Applications/XAMPP/xamppfiles/htdocs/interrna/download-  test.php</b> on line <b>46</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by    (output started at /Applications/XAMPP/xamppfiles/htdocs/interrna/download-test.php:48) in <b>/Applications/XAMPP/xamppfiles/htdocs/interrna/download-test.php</b> on line <b>47</b><br />
TRIPLE_ID,PDB_ID,FIRST_RESIDUE,FIRST_CHAIN,SECOND_RESIDUE,SECOND_CHAIN,THIRD_RESIDUE,THIRD_CHAIN,SEQUENCE,QUAD1_ID,PDB_ID,FIRST_RESIDUE,FIRST_CHAIN,SECOND_RESIDUE,SECOND_CHAIN,THIRD_RESIDUE,THIRD_CHAIN,FOURTH_RESIDUE,FOURTH_CHAIN,SEQUENCE
QUAD1_39435,3oww,C39,B,A64,B,G7,A,C82,A,CAGC
QUAD1_39436,3oww,C5,B,G84,B,A41,A,G62,A,CGAG
QUAD1_39437,3oww,C82,B,G7,B,A64,A,C39,A,CGAC
QUAD1_39438,3oww,G62,B,A41,B,G84,A,C5,A,GAGC

我希望能够根据$names数组将这些文件作为单独的文件下载。因此file1将triple_cognac.csv包含Table1中的行,而quad1_cognac.csv将包含Table2中的行。有人可以帮忙纠正代码吗?

我的代码:

<?php
// Make a MySQL Connection
$conn = mysql_connect("localhost","root","");
mysql_select_db("2RNA",$conn);

$pdbid = $_GET['var'];

//print $pdbid;

$names = array(
    "triple_cognac" => "TRIPLE_COGNAC",
    "quad1_cognac" => "QUAD1_COGNAC",
);

foreach($names as $x => $x_value) {
    $file = $x;
    $tablename = $x_value;

    $sql1 = mysql_query("SELECT * from ". $tablename. " where PDB_ID like '$pdbid'");

    if(mysql_num_rows($sql1) == 0) 
    { 
        echo "";
    } 
    else 
    {
        //print $file ." ". $tablename; 
        //print "</br>"; 

        $filename = $file.".csv";
        $fp = fopen('php://output', 'w');

        $query = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='2RNA' AND TABLE_NAME= '$tablename'";
        $result = mysql_query($query);
        while ($row = mysql_fetch_row($result)) {
            $header[] = $row[0];
        }   
        header('Content-type: application/csv');
        header('Content-Disposition: attachment; filename='.$filename);
        fputcsv($fp, $header);

        $num_column = count($header);       
        $query2= "SELECT * from ". $tablename. " where PDB_ID like '$pdbid'";
        $result2 = mysql_query($query2);
        while($row = mysql_fetch_row($result2)) {
            fputcsv($fp, $row);
        }
    } 
} 
//exit;     
?>

0 个答案:

没有答案