2013-02-17 21 views
1

我正在使用PHP和MySQL(V5.1)的事件日历工作,其中admin将添加一个事件,然后为该事件提供一个出席列表也会被创建。我有三个表格:活动,出席和成员。到目前为止,我可以使用通过PHP表单输入的信息创建事件。我试图通过从刚刚创建的事件中插入事件ID来更新考勤表,以及从成员表中拉入成员列表(使用成员ID)。尽管如此,没有什么会被添加到参加表格。有人能让我知道我应该做什么不同吗?使用LAST_INSERT_ID()和另一个表中的行在PHP/MySQL中的两个插入

一些我使用表中的字段:
活动: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"); 

}

回答

0

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

  • 锁定表events WRITE;
  • UNLOCK TABLES

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

+0

谢谢大家。事实证明,我的代码不工作的原因实际上完全在文件的不同部分(只是一个提示,如果你要创建一个页面的副本来测试其他代码,总是记得更新你的表单动作。哎呀)。为了记录,所有的建议将按照预期填充表格,就像我的原始代码一样。 &DSJ建议使用MySQLi并锁定表格似乎是比我使用的更好的做法,所以我就这样做了。 – 2013-02-18 12:31:10

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") ; 
0

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

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

你怎么说[那](http://stackoverflow.com/questions/25969/sql-insert-into-values-select-from)? – vikingmaster 2013-02-17 18:46:54

+0

@ jari哦,有趣;-) – michi 2013-02-17 18:50:53

相关问题