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();
}