CREATE TABLE `jobs` (
	`job_reference`	TEXT,
	`job_title`	TEXT,
	`job_status`	TEXT,
	`reply_to`	TEXT
);
 
 
CREATE TABLE `job_history` (
	`job_reference`	TEXT,
	`field_name`	TEXT,
	`old_value`	TEXT,
	`new_value`	TEXT,
	`changed_on`	TEXT
);
extract.php
<?php
 
$filename = "grant.csv";
$content = file_get_contents($filename);
$lines = explode("\n", $content);
unset($lines[0]);
 
$field_name[0] = "reply_to";
$field_name[1] = "job_status";
$field_name[2] = "job_reference";
$field_name[3] = "job_title";
 
foreach($lines as $line) {
	if(empty($line))
		continue;
	$fields = explode("\t", $line);
	$job_reference = $fields[2];
	foreach($field_name as $field_pos=>$db_field_name) {
		$data[$job_reference][$db_field_name] = $fields[$field_pos];
	}
}
 
$myDB = new PDO('sqlite:/home/seven/tmp/grant.db');
 
 
foreach($data as $job_ref=>$val) {
	if(empty($val['job_reference']))
		continue;
	$job_reference = $val['job_reference'];
	$sql = "select * from jobs where job_reference= :job_reference";
	$stmt = $myDB->prepare($sql);
    	$stmt->bindParam(':job_reference', $job_reference, PDO::PARAM_STR);
	$stmt->execute();
	$results = $stmt->fetch();
	if($results) {
		foreach($field_name as $field_pos=>$db_field_name) {
			if($val[$db_field_name] != $results[$db_field_name]) {
				$changed_on = date("Y-m-d H:i");
				echo "Field $db_field_name changed from {$results[$db_field_name]} to {$val[$db_field_name]}\n";
				$sql = "insert into job_history(job_reference, field_name, old_value, new_value, changed_on) values(:job_reference, :field_name, :old_value, :new_value, :changed_on)";
				$stmt_change = $myDB->prepare($sql);
				$stmt_change->bindParam(':job_reference', $job_reference, PDO::PARAM_STR);
				$stmt_change->bindParam(':field_name', $db_field_name, PDO::PARAM_STR);
				$stmt_change->bindParam(':new_value', $val[$db_field_name], PDO::PARAM_STR);
				$stmt_change->bindParam(':old_value', $results[$db_field_name], PDO::PARAM_STR);
				$stmt_change->bindParam(':changed_on', $changed_on, PDO::PARAM_STR);
				$stmt_change->execute();
				$sql = "update jobs set $db_field_name = :new_value where job_reference = :job_reference";
				$stmt_update = $myDB->prepare($sql);
				$stmt_update->bindValue(':job_reference', $job_reference, PDO::PARAM_STR);
				$stmt_update->bindValue(':new_value', $val[$db_field_name], PDO::PARAM_STR);
				$stmt_update->execute();
			}
		}
	} else {
			echo "Insert row\n";
	$field_names = implode(",", array_values($field_name));
	foreach($field_name as $pos_id=>$field_name_val) {
		$val_names[] = ":".$field_name_val;
	}
	$value_names = implode(",", $val_names);
	$sql = "insert into jobs($field_names) values($value_names)";
	$stmt = $myDB->prepare($sql);
 
	foreach($field_name as $field_pos=>$db_field_name) {
		$bind_name = ":".$db_field_name;
		$stmt->bindParam($bind_name, $val[$db_field_name], PDO::PARAM_STR);
	}
	$stmt->execute();
	}
}
 
 
 
?>