PHP в mySQL — дублирующая запись при поиске идентификатора вставки

У меня проблема с отправкой формы PHP в MySQL — это вставка multi_query, которая должна кормить две таблицы. Все работало нормально, но я недавно установил отношение внешнего ключа, и что-то в процессе получения mysqli_insert_id для записи в родительскую таблицу приводит к тому, что первая запись дважды вводится в эту таблицу — чтобы использовать имена таблиц из моего кода ниже запись основной таблицы вставляется дважды, а запись локальной таблицы вставляется один раз с $ master_id первой основной записи. У меня действительно есть только функциональное понимание PHP — кто-то может объяснить, почему это происходит и как я могу это исправить, чтобы запись вставлялась только один раз в каждую таблицу?

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$date = $_POST['date'];
$time = $_POST['time'];
$latitude = $_POST['latitude'];
$longitude = $_POST['longitude'];
$accuracy = $_POST['accuracy'];
$species = $_POST['species'];

$sql = "INSERT INTO master (date, time, latitude, longitude, accuracy, species, source)
VALUES ('$date', '$time', '$latitude', '$longitude', '$accuracy', '$species', 'source A');";

mysqli_query($conn, $sql);
$master_id = mysqli_insert_id($conn);

$sql .= "INSERT INTO local (Master_ID, date, time, latitude, longitude, accuracy, species)
VALUES ('$master_id', '$date', '$time', '$latitude', '$longitude', '$accuracy', '$species');";

if ($conn->multi_query($sql) === TRUE) {
$conn->close();
header("Location:http://d-bird.org/thank%20you.html");
}
else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

0

Решение

$sql .= "INSERT INTO local (Master_ID, date, time, latitude, longitude, accuracy, species)
VALUES ('$master_id', '$date', '$time', '$latitude', '$longitude', '$accuracy', '$species');";

должно быть

$sql = "INSERT INTO local (Master_ID, date, time, latitude, longitude, accuracy, species)
VALUES ('$master_id', '$date', '$time', '$latitude', '$longitude', '$accuracy', '$species');";

без точечной конкатенации за $ sql

2

Другие решения

Вы добавляете вторую вставку к первой.

изменения

$sql .= "INSERT INTO local (Master_ID, date, time, ...

в

$sql = "INSERT INTO local (Master_ID, date, time, ...

должен исправить вашу проблему.

1

По вопросам рекламы [email protected]