0

下面我有一个使用 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第一个插入中已经插入的 's 才能将这些 id 插入其表中。我的问题是如何SessionId从第一个插入中检索,以便我可以将它们包含在第二个插入中?

4

5 回答 5

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,它还将在表中插入最后插入的 ID Session_Complete

于 2013-01-03T09:14:28.183 回答
1

看看如何在 PHP 中获取 MySQL 表的最后插入 ID?获取插入后的最后一个插入 ID,Session并在以下插入中使用该值Session_Complete

于 2013-01-03T09:15:00.217 回答
1

应该是这样的:

$insert->insert_id;
于 2013-01-03T09:15:48.250 回答
0

使用 MySQL 函数LAST_INSERT_ID()

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

于 2013-01-03T09:13:07.953 回答
0

就像您的其他问题中的其他表格一样,Session_Complete看起来像另一个过度不必要的表格。
无论你想从这张表中得到什么信息,你都可以从中得到Session
所以,根本没有下面的插入物。

您似乎需要修改您的数据库结构,或者 - 甚至更好 - 将其作为一个单独的问题发布在这里,并就如何正确组织它获得很好的建议。

于 2013-01-03T09:15:52.210 回答