0

PHP で SQL クエリを CSV ファイルに書き込もうとしています。[前の質問で] [1] いくつかのアドバイスのおかげで、私はこれを機能させました。ただし、前の例から可能だったコードの繰り返しを削減しようとしています。

ここで関数にヘッダー/ストリームラッパーを作成しています:

function csvCreate($filename){
    header("Cache=Control: must-revalidate, post-check=0, pre-check=0");
    header('Content-Description: File Transfer');
    header("Content-type: text/csv");
    header("Content-Disposition: attachment; filename={$filename}");
    header("Expires: 0");
    header("Pragma: public");
    $fh = @fopen( 'php://output', 'w' );
}

次に、条件ステートメントで関数を呼び出し、ここでパラメーターとして $filename を渡します。

if(isset($_POST["Submit"]) && ($_POST['Weight'] == 'Weight'))
{
    //csvCreate->$fileName .= 'OutputWeightNull.csv';
    csvCreate('OutputWeightNull.csv');
    $query = mysqli_query($conn, 'SELECT * FROM  `bfi_product_volumne_data` WHERE weight = 0 OR weight IS NULL') or die(mysqli_error($conn));
    if ($result = mysqli_fetch_array($query,MYSQLI_ASSOC))
    {
        fputcsv($fh, array_keys($result));
        fputcsv($fh, $result);
        while ($result = mysqli_fetch_array($query,MYSQLI_ASSOC))
        {
            fputcsv($fh, $result);
        }
    }
}

問題は、データが CSV に書き込まれていないことです。私の感じでは、「fputcsv」呼び出しを関数に向ける必要があります。「csvCreate->fputcsv」を使用してこれを試みましたが、機能していないようです。ここで問題が何であるかを誰かが提案できますか。ありがとう

  [1]: http://stackoverflow.com/questions/33433737/php-writing-a-mysql-query-to-cs
4

1 に答える 1

1

$fh問題は、関数内でファイル ポインターを作成することです。したがって、関数の外部ではなく、関数の内部でのみ表示されます (コードを関数に配置する前はおそらくそうでした)。その変数を関数から外部の世界に渡す必要があります。でできますreturn。次に、「外側」の世界で、その戻り値を「外側」スコープの変数に割り当てて使用する必要があります。

$fh関数の外に渡す必要があります。いえ

function csvCreate($filename){
    // .. rest of the code
    $fh = @fopen( 'php://output', 'w' );
    return $fh;
}

次に、出力に書き込むコードで$fh、そのスコープで表示されるように次のことを行います。

// .. rest of the code
$fh = csvCreate('OutputWeightNull.csv');
// .. rest of the code
于 2015-11-02T12:45:49.117 に答える