PHP:如何在csv中转换SQL结果

时间:2015-04-29 01:27:48

标签: php mysql csv export

我正在尝试在CSV文件中转换SQL查询结果,但我找不到可行的解决方案。你有什么建议吗?

提前Tnx!

这是我的代码:

 <? mysql_query("SET CHARACTER SET 'utf8'");  

                $result3 = mysql_query("SELECT * FROM richieste GROUP BY mail");
while( $row2 = mysql_fetch_array( $result3 ) )

            {

            $id="{$row2['id']}";
            $nominativo="{$row2['nominativo']}";
            $mail="{$row2['mail']}";
            $telefono="{$row2['telefono']}";
            $comune="{$row2['comune']}";
            $cap="{$row2['cap']}";
            $provincia="{$row2['provincia']}";
            $regione="{$row2['regione']}";


            echo"
            <tr><td width='20%' align='left' class='testo_verde_maiuscolo'><a href='visualizza_richieste.php?mail=$mail&id=$id'>$nominativo</a></td><td width='15%' align='left' class='testo_verde'><a href='mailto:$mail'>$mail</a></td>
            <td width='10%' align='left' class='testo_verde'>$telefono</td><td width='15%' align='left' class='testo_verde'>";

在另一个表中查找值

            $result_comune = mysql_query("SELECT * FROM comuni WHERE cod_istat=$comune");
while( $row_comune = mysql_fetch_array( $result_comune ) )
            { $comune_traslata="{$row_comune['comune']}";echo"$comune_traslata";
            }
            echo"</td><td width='10%' align='left' class='testo_verde'>
            $cap</td><td width='10%' align='left' class='testo_verde'>
    ";

这里我正在寻找另一个表中的值

        $result_provincia = mysql_query("SELECT * FROM province WHERE cod_provincia=$provincia");
while( $row_provincia = mysql_fetch_array( $result_provincia ) )
            {

            $provincia_traslata="{$row_provincia['provincia']}";
            echo"$provincia_traslata";
            }
            echo"</td>
            <td align='left' class='testo_verde'>";

与之前相同,在另一个表中查找值

            $result_regione = mysql_query("SELECT * FROM regioni WHERE cod_regione=$regione");
while( $row_regione = mysql_fetch_array( $result_regione ) )
            {

            $regione_traslata="{$row_regione['regione']}";

        echo"$regione_traslata";
            }
            echo"</td>
            ";  
            echo"</tr>";

首次编辑:尝试使用此代码:

$_csv_data="id;nominativo;mail;telefono\n";
@fwrite( $_fp, $_csv_data);
while (list( $id, $nominativo, $mail, $telefono) = mysql_fetch_row($result3))
{
$_csv_data = $id.';'.$nominativo.';'.$mail.';'.$telefono."\n";
@fwrite( $_fp, $_csv_data);
}
@fclose( $_fp );  

但我只是获得了csv的第一行。

} ?>   

2 个答案:

答案 0 :(得分:0)

HTML生成mysql_fetch_array循环中的重复while调用将消耗所有行,并在完成时将内部结果指针留在末尾。因此,当您在同一结果上尝试另一个mysql_fetch_array时,已经在结果的末尾,您将不会收到任何(更多)行。

尝试添加...

mysql_data_seek($result3, 0);

...在第二个/ CSV生成循环之前,将内部指针移动到查询结果的开头。

作为旁注,请在mysql_* Views Global Filter函数使用情况下the manual查看此内容:

  

自PHP 5.5.0起,此扩展程序已弃用,将来将被删除。相反,应使用MySQLiPDO_MySQL扩展名[...]

答案 1 :(得分:0)

为什么要注意尝试直接从MySQL将数据写入csv文件(您可以使用到outfile )。 以下是一个例子:

SELECT * FROM province WHERE cod_provincia=$provincia into outfile '/tmp/abc.csv' fields terminated by ',' enclosed by '"' lines terminated by '\n';

根据查询中的where子句,数据将以csv文件写入。