如何从第一个插入中检索id以便在第二个插入中使用

时间:2013-01-03 09:10:00

标签: php sql mysqli

下面我有一个使用php和mysqli的INSERT数据库函数:

for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; $i++) {

        $insertsql = "
  INSERT INTO Session
    (SessionName, SessionTime, SessionDate, SessionWeight, SessionDuration, TotalMarks, ModuleId, TeacherId, Room)
  VALUES
    (?, ?, ?, ?, ?, ?, ?, ?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
  // Handle errors with prepare operation here
}

    $sessname = $_SESSION['id'] . ($n == 1 ? '' : $i);
    $sessdate = date("Y-m-d", strtotime($_SESSION['dateChosen']));

    $insert->bind_param("sssisiiis", $sessname, $_SESSION['timeChosen'], $sessdate,
                 $_SESSION['totalWeight'], $time, $_SESSION['textMarks'],
                 $_SESSION['hiddenmodule'], $teacherid, $_SESSION['rooms']);

    $insert->execute();

    if ($insert->errno) {
      // Handle query error here
    }

    $insert->close();

}

以上代码将在下面的数据库中插入此数据作为示例:

SessionId (Auto) SessionName  SessionTime  //etc
1                ADFGR1       01:00:00
2                ADFGR2       13:00:00
3                ADFGR2       09:00:00

无论如何,您可以看到我在上面的代码中没有包含SessionId,因为它是一个自动增量,这意味着无论如何都会显示它。

但我遇到的问题是在这个插入下面,我想要做的是当上面的插入完成后,我想在下面做另一个插入:

        $insertsession = "
  INSERT INTO Session_Complete
    (SessionId)
  VALUES
    (?)
";
if (!insertdb = $mysqli->prepare($insertsession)) {
  // Handle errors with prepare operation here
}


    insertdb->bind_param("i",$value);

    insertdb->execute();

    if (insertdb->errno) {
      // Handle query error here
    }

但是我对上面插入的问题是它需要第一个插入中已经插入的SessionId才能将这些id插入到它的表中。我的问题是如何从第一个插入中检索SessionId,以便将它们包含在第二个插入中?

5 个答案:

答案 0 :(得分:2)

如果您愿意,可以在此使用TRIGGER,例如

delimiter $$
CREATE TRIGGER `trigger_Name` 
  AFTER INSERT ON `Session`
FOR EACH ROW 
BEGIN
  INSERT INTO Session_Complete (SessionId) values (LAST_INSERT_ID());
END$$
delimiter ;

触发器的作用是在表Session上成功插入后,它还会在表Session_Complete上插入最后插入的ID。

答案 1 :(得分:1)

Session插入后,请查看How do I get the last inserted ID of a MySQL table in PHP?以获取最后一个插入ID,并将以下插入的值用于Session_Complete

答案 2 :(得分:0)

使用MySQL函数LAST_INSERT_ID()

  

LAST_INSERT_ID()(不带参数)返回一个BIGINT(64位)值,表示由于最近执行的INSERT语句而成功为AUTO_INCREMENT列插入的第一个自动生成的值。

答案 3 :(得分:0)

它应该是这样的:

$insert->insert_id;

答案 4 :(得分:0)

与其他问题中的其他表格一样,Session_Complete看起来像另一张过分不必要的表格 无论您想从此表中获得什么信息,都可以从Session获得 所以,根本没有插入。

您似乎需要修改数据库结构,或者 - 更好 - 将其作为单独的问题发布在此处,并就如何正确组织它提供良好的建议。