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文件。
我正在尝试将 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文件。