を使用してメモリ制限エラーが発生しfetchAll
たため、代わりに使用しようとしてfetch
いますが、それを行う方法が見つかりません。なにか提案を?while
の代わりにをどこで/どのように使用するforeach
か
元のコードは次のとおりです。
// We get all the data from the table
$Qselect = $pdo->prepare('SELECT * FROM '.$table_to_export.'');
$Qselect->execute(array(''));
$results = $Qselect->fetchAll(PDO::FETCH_ASSOC); // Here is the problem
$countRmain = $Qselect->rowCount();
// We get the column names
$Qdescribe = $pdo->prepare('DESCRIBE '.$table_to_export.'');
$Qdescribe->execute();
$limit = $Qdescribe->rowCount()-1; // Number of column in the table
$table_fields = $Qdescribe->fetchAll(PDO::FETCH_COLUMN); // No problem here
foreach($table_fields as $key => $fields){
$outputCsv .= trim($fields).';';
}
// We remove the ; at the end
$outputCsv = rtrim($outputCsv, ';');
// Data
$outputCsv .= "\n";
if($countRmain > 0){
foreach($results as $row){
$column = 0 ;
foreach ($row as $key => $val){
if (is_null($val)){
$outputCsv .= 'NULL;'; // If the field id empty, we add NULL
}
else {
$outputCsv .= $val.';'; // We add the value in the file
}
if ($column == $limit)
$outputCsv .= "\n";
$column ++;
}
}
}
else
exit('No data to export');
foreach
ループを含めようとしましwhile($results = $Qselect->fetch()){
たが、非常に長い時間がかかります (50000 行で 10 分)
PS: PHP の memory_limit を増やすと、fetchAll で動作しますが、この解決策は必要ありません。