Mysql fputcsv和fwrite不工作

Mysql fputcsv和fwrite不工作,mysql,file,fputcsv,Mysql,File,Fputcsv,我按照给出的解释将查询结果写入一个文件。 但在这种情况下,我必须先打开并写入文件头。然后继续为多个查询逐个写入/追加查询结果。这是我作为函数编写的附加部分。我的脚本只使用头(从第一部分开始)编写文件的问题在于,调用它时,它没有遵循函数中的fputcsv命令。你能帮我解决这个问题吗 以下是我首先打开文件的代码: <?php $fp = fopen('php://output', 'w'); $headers = array("Index","Gene_symbol","Gene_Name",

我按照给出的解释将查询结果写入一个文件。 但在这种情况下,我必须先打开并写入文件头。然后继续为多个查询逐个写入/追加查询结果。这是我作为函数编写的附加部分。我的脚本只使用头(从第一部分开始)编写文件的问题在于,调用它时,它没有遵循函数中的fputcsv命令。你能帮我解决这个问题吗

以下是我首先打开文件的代码:

<?php
$fp = fopen('php://output', 'w');
$headers = array("Index","Gene_symbol","Gene_Name","Human_entrez","Rat_entrez","Mouse_entrez","DbTF","PMID");
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="export.txt"');
fputcsv($fp, $headers,chr(9));
header('Pragma: no-cache');
header('Expires: 0');
?>

谢谢

您的第一个问题是您的文件句柄在函数中没有作用域。我认为最好的方法是将其传递到函数中:

....
     elseif (mysql_num_rows($result)>0)
     {result_disp($result, $fp);}
....

function result_disp($results, $fp)
{
if($fp && $results)
{
 while ($rows = mysql_fetch_row($results))
    {
        fputcsv($fp, array_values($rows),chr(9));
    } //DO NOT PUT "die()" HERE
 }
}
第二个问题是函数中的“die()”语句。“die()”的目的是完全停止脚本。这是自杀。因此,如果保留它,脚本将在第一次调用result_disp结束时停止。这意味着你不仅永远不会到达fclose($fp),也永远不会到达result\u disp的任何其他调用


第三个问题是您正在使用mysql_*函数。由于以下几个原因,它们已被弃用(不再使用)。我个人有数据库连接冻结的经验。你应该切换到或

$fp在函数内部不可用。将错误报告设置为一个合理的调试值(E_ALL),那么PHP本身就会告诉您类似的内容。阅读变量范围的基础知识,还要注意csv头在HTTP头之间。它们应该放在后者后面,用换行符隔开。谢谢,我在代码开头尝试了错误报告(E_ALL),但它没有报告任何错误:(.其次,在为全局变量建议的页面上,我找不到filehandle$fp是否可以声明为全局。我在函数外部和内部都尝试了全局$fp,但也没有任何帮助。有任何建议如何使其成为全局变量。感谢在函数中的第一个
if
语句之前添加
global$fp
<?php
function result_disp($results)
{
if($fp && $results)
{
 while ($rows = mysql_fetch_row($results))
    {
        fputcsv($fp, array_values($rows),chr(9));
    } die;
 }
}
fclose($fp);
?>
....
     elseif (mysql_num_rows($result)>0)
     {result_disp($result, $fp);}
....

function result_disp($results, $fp)
{
if($fp && $results)
{
 while ($rows = mysql_fetch_row($results))
    {
        fputcsv($fp, array_values($rows),chr(9));
    } //DO NOT PUT "die()" HERE
 }
}