csvファイルが4カラム1行だと保存することは可能ですが、
4カラム2行以上だとなぜか保存されなく、ループされません。
また2行以上だと、1行目も保存されていなく、カラム数が4以上でエラーが出てしまいます。
なぜなのか解決策を教えて下さい。
csvファイル例
aaaa,bbbb,cccc,dddd
eeee,ffff,gggg,hhhh
php
1 $stmt = $pdo->prepare('INSERT INTO test_table VALUES (?, ?, ?, ?)'); 2 3 /* トランザクション処理 */ 4 $pdo->beginTransaction(); 5 try { 6 $fp = fopen($tmp_name, 'rb'); 7 while ($row = fgetcsv($fp)) { 8 if ($row === array(null)) { 9 // 空行はスキップ 10 continue; 11 } 12 if (count($row) !== 4) { 13 // カラム数が異なる無効なフォーマット 14 throw new RuntimeException('Invalid column detected'); 15 } 16 $executed = $stmt->execute($row); 17 } 18 if (!feof($fp)) { 19 // ファイルポインタが終端に達していなければエラー 20 throw new RuntimeException('CSV parsing error'); 21 } 22 fclose($fp); 23 $pdo->commit(); 24 } catch (Exception $e) { 25 fclose($fp); 26 $pdo->rollBack(); 27 throw $e; 28 } 29
php
1if (count($row) !== 4) { 2 echo __LINE__ . "\n"; 3 echo count($row); 4 // カラム数が異なる無効なフォーマット 5 throw new RuntimeException('Invalid column detected'); 6}
上記の箇所でエラーが出てしまいます。
またカウント数が7と表示され、4以外になり上記のようなエラーになります。
また、var_dump($row); 変数の中身はこのように表示されます
array(7) { [0]=> string(4) "aaaa" [1]=> string(4) "bbbb" [2]=> string(4) "cccc" [3]=> string(9) "dddd eeee" [4]=> string(4) "ffff" [5]=> string(4) "gggg" [6]=> string(4) "hhhh" }
回答1件
あなたの回答
tips
プレビュー