Hay que hacer varios pasos
$server = "localhost"; $user = "root"; $password = ""; $db = "sakila"; try { $conn = new PDO("mysql:host=$server;dbname=$db;charset=UTF8", $user, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //Los datos que tengo que insertar $pais = 'ArgentinaJarll'; $ciudad = "La plata"; $direccion = "Agla 6"; $nombre = "Juan"; $apellidos = "Pi"; //Compruebo si existe el país consultando a la base de datos si hay //algún país que se llame como el que me han pasado $sql = "select * from country where country=:country"; $parametros = [ 'country' => $pais ]; $st = $conn->prepare($sql); $st->execute($parametros); $country = $st->fetch(); //Si no existe lo inserto if (empty($country)) { $sql = "insert into country(country) values(:country)"; $st = $conn->prepare($sql); $st->execute($parametros); $country_id = $conn->lastInsertId(); } else { $country_id = $country['country_id']; } //Aquí ya tengo el país echo $country_id . "<br/>"; //Hago la misma comprobación para la ciudad pero ojo, de ese país $sql = "select * from city where city=:city and country_id=:country_id"; $parametros = [ 'city' => $ciudad, 'country_id' => $country_id ]; $st = $conn->prepare($sql); $st->execute($parametros); $city = $st->fetch(); //Si no existe la ciudad la inserto if (empty($city)) { $sql = "insert into city(city,country_id) values(:city,:country_id)"; $st = $conn->prepare($sql); $st->execute($parametros); $city_id = $conn->lastInsertId(); } else { $city_id = $city['city_id']; } //Aquí ya tengo el id de la ciudad echo $city_id . "<br>"; //A partir de aquí no compruebo más. Inserto la dirección con esa ciudad $sql = "insert into address (city_id,address) values (:city_id,:address)"; $parametros = [ 'city_id' => $city_id, 'address' => $direccion ]; $st = $conn->prepare($sql); $st->execute($parametros); //Recupero el id de de esa dirección $address_id = $conn->lastInsertId(); //Inserto el cliente con el id de la dirección y en store_id pongo un 1 directamente $sql = "insert into customer (address_id,first_name,last_name,store_id)" . " values (:address_id,:first_name,:last_name,1)"; $parametros = [ 'address_id' => $address_id, 'first_name' => $nombre, 'last_name' => $apellidos ]; $st = $conn->prepare($sql); $st->execute($parametros); echo "insertado el cliente con id ".$conn->lastInsertId(); } catch (Exception $e) { echo "Connection failed: " . $e->getMessage(); }