0

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;
   }
4

2 に答える 2

2
$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 のドット連結なし

于 2016-01-08T21:09:29.060 に答える
1

2 番目のインサートを最初のインサートに追加しています。

変化

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

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

問題を解決する必要があります。

于 2016-01-08T21:09:08.760 に答える