PHPを使用してテーブルをCSVファイルにエクスポートしようとしていますが、次のコードで動作しています:
while($row = $results->fetchArray()) {
print '"' . stripslashes(implode('","',$row)) . "\"\n";
}
ただし、CSV ファイルを表示すると、各フィールドの複製が作成されます。フィールドごとに 1 つに制限する方法がわかりません。
これはSQLite3Result::fetchArray
、既定では、結果の各列に対して数値インデックスと名前付きインデックスの両方がフェッチされるためです。したがって$row
、次のようになります。
array(
0 => 'Fred',
'firstname' => 'Fred',
1 => 'Jones',
'lastname' => 'Jones',
2 => 'fredjones@example.com',
'email' => 'fredjones@example.com'
)
fetchArray
これを回避するには、定数を渡して呼び出しで他の動作を指定します。
while ($row = $results->fetchArray(SQLITE3_ASSOC)) {
これは、列の名前のみがフェッチされることを意味します。同様に、次のこともできますSQLITE3_NUM
。あなたの場合、違いはありません。
fputcsv
また、必要に応じて囲みとエスケープを処理するメソッドを使用すると、CSV データをより適切に出力できます。ファイル ハンドルが必要です。データをエコーするだけの場合は、次のSTDOUT
定数を使用できます。
fputcsv(STDOUT, $row);
fetchArray
デフォルトでは、連想インデックスと数値インデックスの両方を返します。数値インデックスのみを返すには、次を使用します。
while($row = $results->fetchArray( SQLITE3_NUM )) {
または、連想配列を返すには、次を使用します。
while($row = $results->fetchArray( SQLITE3_ASSOC )) {