【问题标题】:PHP to mySQL - duplicating entry when finding insert IDPHP to mySQL - 查找插入 ID 时重复条目
【发布时间】:2016-01-08 21:04:57
【问题描述】:

我的 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;
   }

【问题讨论】:

  • 你在同一个变量中连接你的 SQL 查询,所以master 表得到两个插入而不是一个。第一个发生在mysqli_query() 的串联之前,第二个发生在multi_query() 的串联之后。分离查询并将数据单独插入每个表中。
  • 是的,就是这样,谢谢。
  • 为什么不使用 SQL LAST_INSERT_ID() 函数而不是在 PHP 中做呢?

标签: php mysql mysqli-multi-query


【解决方案1】:
$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, ...
    

    应该可以解决您的问题。

    【讨论】:

    • 谢谢!是的,那是我的错误。
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2010-10-23
    相关资源
    最近更新 更多