PHP - 从 CSV 文件读取失败记录时捕获失败记录

Nik*_*j V 2 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);
Run Code Online (Sandbox Code Playgroud)

Ash*_*dav 5

如果插入失败,$query则将返回 false,因此,

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