To insert all rows we need to fetch the previously inserted countries and insert their ids with the IP record data.

<?php
function check_if_exists($cc)
{
    
$result safe_query("SELECT id FROM country_data WHERE cc_code_2='{$cc}'");

    
$data sqlite_fetch_array($resultSQLITE_NUM);
    
// return the id or NULL if no data is avaliable
    
return $data $data[0] : NULL;
}

$fp fopen("./ip-to-country.csv""r");
// read ip information 1 entry at a time
while (($row fgetcsv($fp4096))) {
    foreach (
$row as $key => $val) {
        
$row[$key] = sqlite_escape_string($val);
    }

    if (!(
$country_id check_if_exists($row[2]))) {
        
// only insert country data if the country 
        // was not previously encountered
        
$res safe_query("INSERT INTO country_data 
            (cc_code_2, cc_code_3, country_name) 
            VALUES('
{$row[2]}', '{$row[3]}', '{$row[4]}')");
        
$country_id sqlite_last_insert_rowid(sqlite_r);
    }

    
// insert ip range entry
    
safe_query("INSERT INTO ip_ranges 
            (ip_start, ip_end, country_code)
            VALUES(
{$row[0]}{$row[1]}{$country_id})");
}
fclose($fp);
?>