2016-07-01 12 views
1

現在、配列とfputcsvを使用してMySQLテーブルをcsvファイルにエクスポートしています。これは素晴らしいですが、私はこの方法のために大きすぎる(100,000 +行)テーブルを持っているので、私のサイトがタイムアウトします。PHP/PDOで大きなMySQLテーブルをCSVにエクスポート

私の現在のコードは;

<?php          
//open database connection        
require ('../database-config.php'); 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename=exported_archive_all.csv'); 

//SQL Query for Data 
$sql = "SELECT * FROM inverter_data_archive;";   
//Prepare Query, Bind Parameters, Excute Query 
$STH = $dbh->prepare($sql); 
$STH->execute(); 

//Export to .CSV 
$fp = fopen('php://output', 'w'); 

// first set 
$first_row = $STH->fetch(PDO::FETCH_ASSOC); 
$headers = array_keys($first_row); 
fputcsv($fp, $headers); // put the headers 
fputcsv($fp, array_values($first_row)); // put the first row 

while ($row = $STH->fetch(PDO::FETCH_NUM)) { 
fputcsv($fp,$row); // push the rest 
} 
fclose($fp);   
?> 

Iが可能なアプローチは、クエリ結果セットから個々のデータ行を読み取り、PHPに直接書き込むことであることを読んだ://出力は、等次の行を読み取ります。大規模な配列を構築したり、メモリ内にcsvを構築したりするのではなく、

私はいくつかのことを試しましたが、私はループのために苦労していますので、これを達成する方法についての助けがあれば大いに感謝します。

+4

は、なぜあなたはそれを直接行うことができますPHPでこれを行う をupload_max_filesizeのようにphp.iniファイル 検索検索maxと折り目値を確認してください? http://stackoverflow.com/questions/356578/how-to-output-mysql-query-results-in-csv-format –

+0

[こちら](http://stackoverflow.com/questions/4249432/export- to-csv-via-php)を使用します。それはあなたに役立つことができますか? – cachique

+0

このページの例では、テーブル全体が配列に読み込まれるため、同じメモリ/タイムアウトの問題が発生します。 – EllBrandon

答えて

-1

は max_execution_timeは max_input_time max_input_vars max_input_vars post_max_sizeの

+1

[コメントをするのに十分な担当者を獲得することは難しくありません。](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an-i -do-代わりに)。これは質問に答えるかもしれませんが、なぜ、そして/またはこれがどのように質問に答えるかに関する追加の文脈を提供することは、長期的な価値を向上させます。 –

+0

私はPHPのiniを探していたソリューションではありませんが、私は大きなテーブルのために私の既存のコードを使用することができました。私はこれらの2行を先頭に追加しました。 'ini_set( 'memory_limit'、 '-1'); ini_set( 'max_execution_time'、0); ' – EllBrandon

関連する問題