MySQL への PHP フォームの送信に問題があります。これは、2 つのテーブルにフィードすることになっている multi_query 挿入です。すべてが正常に機能していましたが、最近外部キー関係を設定しました。親テーブルへのエントリの mysqli_insert_id を取得する過程で、最初のエントリがそのテーブルに 2 回入力されました。コードのテーブル名を使用するためです。以下では、マスター テーブル エントリが 2 回挿入され、ローカル テーブル エントリが最初のマスター エントリの $master_id で 1 回挿入されます。私は本当にPHPの機能を理解していません.なぜこれが起こっているのか、そしてエントリが各テーブルに1回だけ挿入されるように修正する方法を誰かが説明できますか?
$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;
}