簡體   English   中英

使用LAST_INSERT_ID()在PHP / MySQL中進行兩次插入,並從另一個表中進行行

[英]Two inserts in PHP/MySQL using LAST_INSERT_ID() and rows from another table

我正在使用PHP和MySQL(V5.1)編寫事件日歷,其中管理員將添加事件,然后還將創建該事件的出席者列表。 我有三個表:活動,出勤和成員。 到目前為止,我可以使用通過PHP表單輸入的信息來創建事件。 我正在嘗試通過從剛剛創建的事件中插入事件ID以及從成員表中拉入成員列表(使用其成員ID)來更新出勤表。 不過,沒有任何內容可以出席會議。 有人可以讓我知道我應該做些什么嗎?

我在表中使用的一些字段:
事件:event_ID(主鍵,自動遞增),名稱,位置,日期
出席人數:出席人數ID(主鍵,自動遞增),事件ID,會員ID,出席情況
成員:member_ID(主鍵,自動遞增),名稱,電子郵件

enter code here

這是代碼:

mysql_query("SET AUTOCOMMIT=0");
mysql_query("START TRANSACTION");

$query1 = mysql_query("INSERT INTO events (name , location , date) VALUES ('".mysql_real_escape_string($name)."' , '".mysql_real_escape_string($location)."' , '".mysql_real_escape_string($date)."')");

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) SELECT LAST_INSERT_ID(), members.member_ID FROM members");

if ($query1 and $query2) { 
mysql_query("COMMIT");
} else {
mysql_query("ROLLBACK");

}

您可以使用mysql_insert_id()

$query1 = mysql_query("INSERT INTO events (name , location , date) VALUES ('".mysql_real_escape_string($name)."' , '".mysql_real_escape_string($location)."' , '".mysql_real_escape_string($date)."')");

$insert_id = mysql_insert_id() ;

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) SELECT {$insert_id}, members.member_ID FROM members") ;

幾個重要點。 首先,如果獲得最后一個插入ID,則應首先執行LOCK和UNLOCK查詢:

  • LOCK TABLES events寫;
  • 解鎖表

其次,可以使用mysqli_insert_id()方法獲取最后插入的ID。 這意味着您要插入的表中必須具有AUTO_INCREMENT字段。

VALUES放入$query2以形成正確的SQL語句:

$query2 = mysql_query("INSERT INTO attendance (event_ID , member_ID) **VALUES (**SELECT LAST_INSERT_ID(), members.member_ID FROM members");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM