PHP / MySQL中的两个插入使用LAST_INSERT_ID()和另一个表中的行

时间:2013-02-17 18:33:50

标签: php mysql select insert lastinsertid

我正在使用PHP和MySQL(V5.1)开发事件日历,其中管理员将添加一个事件,然后也会创建该事件的出席列表。我有三张桌子:活动,出席和会员。到目前为止,我可以使用通过PHP表单输入的信息来创建事件。我正在尝试通过从刚刚创建的事件中插入事件ID来更新考勤表,以及从成员表中提取成员列表(使用其成员ID)。但是没有任何东西可以加入到桌子上。有人能让我知道我应该以不同的方式做什么吗?

我在表格中使用的一些字段:
事件:event_ID(主键,自动增量),名称,位置,日期
出勤:attendance_ID(主键,自动增量),event_ID,member_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");

}

3 个答案:

答案 0 :(得分:1)

您可以使用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") ;

答案 1 :(得分:0)

有几个要点。首先,如果您获得最后一个插入ID,则应首先执行LOCK和UNLOCK查询:

  • LOCK TABLES events WRITE;
  • UNLOCK TABLES

其次,您可以使用mysqli_insert_id()方法获取最后一次插入的ID。这意味着您必须在要插入的表中有一个AUTO_INCREMENT字段。

答案 2 :(得分:0)

VALUES放入$query2以形成正确的SQL语句:

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