使用php从mysql数据库导出csv文件

时间:2014-08-25 12:38:16

标签: php html mysql css

<?php
    include("includes/config.php"); 
    if ($_POST['frmCsv']) {
        $strSelect = doSelectCsv();
        header( 'Content-Type: text/csv' );
        header( 'Content-Disposition: attachment;filename=export.csv' );
        $strRow = mysql_fetch_assoc( $strSelect );
        printArray($strRow);
        if ( $strRow ) {
            outputcsv( array_keys( $strRow ) );
        }
        while ( $strRow ) {
            outputcsv( $strRow ); 
        }
    }

    function doSelectCsv()
    {
        $strSql = "SELECT * FROM tbl_member";
        $strResult = SelectQry($strSql);
    }

    function outputcsv( $fields )
    {
        $separator = '';
        foreach ( $fields as $field ) {
            echo $separator . $field;
            $separator = ',';     
        }
    }
?>

这是我从数据库导出csv文件的代码。但它无法选择数据。选择查询无法正常工作。请帮帮我。

2 个答案:

答案 0 :(得分:2)

一个问题是doSelectCsv()没有返回任何内容,但您有以下代码:

$strSelect = doSelectCsv();

然后在下面:

$strRow = mysql_fetch_assoc( $strSelect );

在没有任何SelectQry()知道的情况下,很难真正建议解决方案,但doSelectCsv()必须返回一个值,以便稍后使用。也许以下就足够了:

function doSelectCsv()
{
    $strSql = "SELECT * FROM tbl_member";
    $strResult = SelectQry($strSql);
    return $strResult; // added this line
}

注意:不推荐使用MySQL系列PHP,并且对它的支持将消失。请查看PDOMysqli

但是,如果我们查看MySQL代码,则会出现以下问题:

    $strRow = mysql_fetch_assoc( $strSelect );
    printArray($strRow);
    if ( $strRow ) {
        outputcsv( array_keys( $strRow ) );
    }
    while ( $strRow ) {
        outputcsv( $strRow ); 
    }

您已使用$strRow将第一行分配给mysql_fetch_assoc(),但之后您永远不会获取其他行。我相信上面的内容应该是这样的:

    $strRow = mysql_fetch_assoc( $strSelect );
    printArray($strRow);
    if ( $strRow ) {
        outputcsv( array_keys( $strRow ) );
        while ($strRow = mysql_fetch_assoc($strSelect)) {
            outputcsv( $strRow ); 
        }
    }

这会将第一行的数组键发送到outputcsv(),然后我们遍历if块内的所有其他行,将其余数据发送到outputCsv 。但同样,对于一个严肃的应用程序,请查看PHP提供的新扩展,因为mysql_*函数最终会消失。

另外,正如有人在评论中暗示的那样,PHP有一个函数写入CSV数据,即fputcsv()。这将处理任何特殊情况(如果数据项中包含逗号,该怎么办?)。

答案 1 :(得分:0)

只要用它兄弟:)

 

<?php

if($_POST["download"]){ 
        $output="";
        $line_termineted="\n";

        if( $_POST["download"] =="CSV") $field_termineted=","; else $field_termineted="\t"; 
            $enclosed='"';
            $escaped="\\";

            $export_schema="SR No".$field_termineted."Student ID".$field_termineted."First Name".$field_termineted."Middle Name".$field_termineted."Last Name";
            $dataQuery=mysql_query("select * from sof_student ");
            $output.=$export_schema;
            $p=0;
            while($data=mysql_fetch_array($dataQuery)) {
             $p++;
                $output.= $line_termineted.$p.$field_termineted;
                $output.=$enclosed.$data["id"].$enclosed.$field_termineted;
                $output.=$enclosed.$data["first_name"].$enclosed.$field_termineted;
                $output.=$enclosed.$data["middle_name"].$enclosed.$field_termineted;
                $output.=$enclosed.$data["last_name"].$enclosed.$field_termineted;
              }

    header("Content-Description: File Transfer");
   if( $_POST["download"] =="CSV"){
        header("Content-Type: application/csv");
        header("Content-Disposition: attachment; filename=report".date("d_m_Y_H_i_s").".csv");
    } else {
        header("Content-Type: application/vnd.ms-excel");
        header("Content-disposition: attachment; filename=report".date("d_m_Y_H_i_s").".xls");
    }

    header("Content-Transfer-Encoding: binary");
    header("Expires: 0");
    header("Cache-Control: must-revalidate");
    header("Pragma: public");
    header("Content-Length: ".strlen($output));
    ob_clean();
    flush();
    echo $output;
    exit;
}
 ?>