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しかし、上記の挿入で私が抱えている問題は、それらのIDをテーブルに挿入するために、最初の挿入からすでに挿入されているを必要とすることです。私の質問はSessionId、最初の挿入からを取得して、2番目の挿入に含めることができるようにするにはどうすればよいですか?

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()(引数なし)は、最後に実行されたINSERTステートメントの結果としてAUTO_INCREMENT列に正常に挿入された最初の自動生成値を表すBIGINT(64ビット)値を返します。

于 2013-01-03T09:13:07.953 に答える
0

他の質問の他のテーブルと同様に、Session_Complete別の過度の不要なテーブルのように見えます。このテーブルから必要な情報が何であれ、すでに
取得できます。 したがって、下のインサートはまったくありません。Session

データベース構造を修正する必要があるようです。または、さらに良いことに、別の質問としてここに投稿し、適切に編成する方法についての適切なアドバイスを得る必要があります。

于 2013-01-03T09:15:52.210 に答える