PHP:如何将 SQL 结果转换为 csv

PHP: how to convert SQL result in csv

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

提前发送!

这是我的代码:

 <? 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'>";

正在另一个中寻找值 table

            $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'>
    ";

我在这里寻找另一个table

中的值
        $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'>";

和之前一样,在另一个table

中寻找值
            $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 的第一行。

} ?>   

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

尝试添加...

mysql_data_seek($result3, 0);

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

作为旁注,请参阅 the manual 中的 mysql_* 函数用法:

This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used [...]

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

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

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