繁体   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