我正在将文件上传到mysql数据库。现在该文件包含登录和注销用户的记录。以下是其结构。
我使用PHP codeigniter上传该文件并将其数据插入SQL。 这里date_data被定义为 UNIQUE 因此我不会在同一天获得任何重复记录,因为它包含每日用户登录和注销数据的信息。
现在我已经上传了11月1日到12月10日的数据。然后我再次从12月1日上传数据到1月1日我将收到一个错误,因为它将从12月1日和其他连续几天给出重复数据的错误。是否有可能我可以跳过重复数据并插入剩余的唯一数据?
对于我当前的代码,它会在找到重复数据时停止执行。我想只插入那些唯一的数据。
下面是我要插入SQL表的代码:
控制器
public function upload()
{
$file = rand(1000, 100000) . "-" . $_FILES['file']['name'];
$file_loc = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
$folder = "uploads/";
$location = $_FILES['file'];
$new_size = $file_size / 1024; // new file size in KB
$new_file_name = strtolower($file);
$final_file = str_replace(' ', '-', $new_file_name); // make file name in lower case
if (move_uploaded_file($file_loc, $folder . $final_file))
{
$handle = fopen($folder.$final_file, "r") or die("file cannot open");
if ($handle) {
while (($line = fgets($handle)) !== false)
{
$lineArr = explode("\t", "$line");
$result = $this->attendance_m->insert_file_content($lineArr) ;
}
if (fclose($handle)) {
$this->alert('successfully uploaded', 'admin/attendance.php?success');
redirect('admin/attendance');
}
}
else{
echo "file cannot open";
}
}
}
模特:
public function insert_file_content($ lineArr) {
$data = array(
'emp_id' => $lineArr[0],
'date_data' => $lineArr[1],
'abc' => $lineArr[2],
'def' => $lineArr[3],
'entry' => $lineArr[4],
'ghi' => $lineArr[5],
);
$this->db->insert('daily_data2', $data);
}
答案 0 :(得分:2)
忽略插入
上的重复记录 $data = array(
'emp_id' => $lineArr[0],
'date_data' => $lineArr[1],
'abc' => $lineArr[2],
'def' => $lineArr[3],
'entry' => $lineArr[4],
'ghi' => $lineArr[5],
);
$sql = "INSERT IGNORE INTO `daily_data2`
(`emp_id`,`date_data`,`abc`,`def`,`entry`,`ghi`)
VALUES
(?,?,?,?,?,?)";
$this->db->query($sql, $data);
您也可以尝试这种方式
$result = $this->db->get_where('daily_data2', array('date_data' => $data['date_data'));
if(count( $result->result_array() ) < 1)
{
//insert a new record
}