PHP — Захват записей с ошибкой при чтении из файла CSV

#php

#php

Вопрос:

Я использую PHP-код для загрузки данных из нескольких файлов CSV в базу данных.

Всякий раз, когда я вставляю записи из файла CSV, я хочу вести отдельные журналы для записей, которые не удалось вставить в базу данных. Например, в приведенном выше файле CSV, если записи 2,3 и 4 были вставлены в базу данных, но 5 не был вставлен по некоторым причинам, я хочу вести отдельный журнал для этого. Как я могу этого добиться?

Вот мой пример данных из файла CSV:

введите описание изображения здесь

Вот мой php-код:

 $csvFile= fopen($dir.'/'.$file,"r");
                    
while (($line = fgetcsv($csvFile)) !== FALSE) {
  // Get row data
  $account_code = $line[0];
  $caller_number = $line[1];
  $callee_number = $line[2];
  $context = $line[3];
  $calerid = $line[4]; 
  $source_channel=$line[5];
  $dest_channel=$line[6];
  $lastapp=$line[7];
  $lastdata=$line[8];
  $start_time=$line[9];
  $answer_time=$line[10];
  $end_time=$line[11];
  
  $query = $db->query
("INSERT INTO `cdrnew`(`account_code`, `caller_number`, `callee_number`, `context`, `calerid`, `source_channel`, `dest_channel`, `lastapp`, `lastdata`, `start_time`, `answer_time`, `end_time`)
VALUES ('".$account_code."', '".$caller_number."',  '".$callee_number."', '".$context."', '".$calerid."','".$source_channel."','".$dest_channel."','".$lastapp."','".$lastdata."','".$start_time."','".$answer_time."','".$end_time."')");
}
fclose($csvFile);
  

Комментарии:

1. Что вы подразумеваете под «неудачными записями»?

2. Я не знаю, я просто сказал, что ваш вопрос должен быть более ясным, чтобы кто-нибудь мог на него ответить. Когда я впервые прочитал это, я подумал, что это значит? Пожалуйста, обновите свой вопрос, чтобы другие могли на него ответить.

3. Хорошо, я отредактирую это

Ответ №1:

Если вставить не удается, $query вернет false, поэтому,

 if(!$query) {
  // log
  file_put_contents('<path to log directory>'.date("j.n.Y").'.log', '<error to log>', FILE_APPEND);
}
  

Ответ №2:

Ошибка захвата $query = $db -> query :

 if($query) // returns true if successful
{
  // log success
} else {
  // log failed
}
  

Комментарии:

1. но разве это не вызвало бы выполнение (запрос) дважды?