前提・実現したいこと
PHPでcsvファイルを読み込みデータベース(phpmyadmin)にレコードとして追加するシステムを作っています。
(idは連番にしています)
発生している問題・エラーメッセージ
csvをレコードに追加することは成功したのですが、レコードの最終行にNULLのみが入った余計な一行が追加されてしまいます。 csvファイルを確認したところ問題はなし。 解決お願いします。 問題: id|synonym1|synonym2|..... |和暦 | われき |..... | NULL | NULL |.....
該当のソースコード
php
1<?php 2 set_time_limit(0); 3 4 // ファイルパス取得 5 $get_dir = __FILE__; 6 $get_dir_path = dirname($get_dir); 7 $csv_path = glob($get_dir_path.'/synonyms_DB/*.csv'); 8 // $csv_path = glob($get_dir_path.'/synonyms_DB/同義語マスタ_200421.csv'); 9 10 for($t=0;$t<count($csv_path);$t++){ 11 12 $sql = null; 13 $dbh = null; 14 try { 15 // DB接続 16 $dbh = new PDO('mysql:host=127.0.0.1; dbname=sbiccicms_front_local; charset=utf8', 'root', ''); 17 // レコードインサート内容 18 $sql = "INSERT INTO synonyms (synonym1, synonym2, synonym3, synonym4, synonym5) VALUES (:synonym1, :synonym2, :synonym3, :synonym4, :synonym5)"; 19 //実行準備 20 $sql_start= $dbh->prepare($sql); 21 22 $title_skip = 0; 23 if (($handle_csv_file = fopen($csv_path[$t], "r")) !== FALSE) { 24 // ファイルポインタ有効時 25 while($handle_csv_file && !feof($handle_csv_file)) { 26 $input_csv = fgetcsv($handle_csv_file); 27 // if($title_skip < 6){ 28 if($title_skip < 2) { 29 $title_skip++; 30 continue; 31 } 32 // $input_csv = array_filter($input_csv, 'strlen'); 33 for($i=0;$i<count($input_csv);$i++) { 34 // if($input_csv[$i]===NULL) { 35 // continue; 36 // } 37 $input_csv[$i] = mb_convert_encoding($input_csv[$i], 'UTF-8', 'SJIS-win'); 38 echo $input_csv[$i].'<br>'; 39 } 40 //実行 41 $sql_start->execute([':synonym1' => $input_csv[1], ':synonym2' => $input_csv[2], ':synonym3' => $input_csv[3], ':synonym4' => $input_csv[4], ':synonym5' => $input_csv[5]]); 42 } 43 // // 最後のレコード削除 44 // $last_id = $dbh->lastInsertId(); 45 // $delete_recode = "DELETE FROM synonyms WHERE id = $last_id"; 46 // $dbh->query($delete_recode); 47 if((feof($handle_csv_file))-1){break;} 48 }else{ 49 throw new Exception('ファイル接続エラー'); 50 } 51 fclose($handle_csv_file); 52 $sql_start= null; 53 $dbh = null; 54 55 } catch(PDOException $e) { 56 echo 'DB接続エラー:' . $e->getMessage(); 57 } 58 } 59?>
試したこと
//NULLのスキップ
if($input_csv[$i]===NULL) {
continue;
}
//NULL空白の削除
$input_csv = array_filter($input_csv, 'strlen');
//最後にレコードが追加されてしまうため最後のレコード削除(ふさわしくないため却下)
$last_id = $dbh->lastInsertId();
$delete_recode = "DELETE FROM synonyms WHERE id = $last_id";
$dbh->query($delete_recode);
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。