我正在使用MySQL和PHP构建一个简单的事件注册系统。我有四张桌子:
events: event_id, event_name
instance: instance_id, event_id, date
attendee: attendee_id, attendee_name, attendee_email, attendee_tel
registration: reg_id, attendee_id, instance_id
为了澄清,实例表包含给定事件的实例,即特定日期的特定事件。
当与会者注册(通过表格)时,我想将他们的详细信息写入attendee
表,然后将他们注册的事件以及相关的attendee_id
写入registration
表,这样,当我稍后查询registration
表时,它会显示我注册了什么事件以及由谁注册。
然而,我对SQL(以及一般的数据库,更不用说PHP了)还很陌生,所以我不确定如何做到这一点,因为attendee_id
只是刚刚通过将参与者添加到表中生成的。我可以使用轻松地在attendee
表中插入一行
$q = "INSERT INTO attendee (attendee_name, attendee_email, attendee_tel)
VALUES ( '$fullname', '$email', '$tel' )";
很明显,$_POST
从表单中抓取了这些值。顺便说一下,表单也抓取了instance_id
。
所以我只需要知道如何将相关信息插入registration
表中。有什么想法吗?
将数据插入第一个表(与会者)后,使用php函数mysql_insert_id()获取最后一个自动递增id。
然后运行另一个查询,将数据插入第二个表(注册)。
在这种情况下,为了避免两个表的数据不匹配,最好使用BEGIN和COMMIT。因此,如果在第二次查询之间发生任何MySQL错误,它将自动返回角色。
使表中的这些列成为主键并自动递增
events: event_id
instance: instance_id
attendee: attendee_id
registration: reg_id
当您运行查询以插入到这些表中时,您可以通过在插入查询之后立即执行以下代码来获得最后插入的id
$id = mysql_insert_id();
适当地使用这个
参见mysql_insert_id()
函数的作用是:mysql_insert_id()返回上一次insert操作生成的AUTO_INCREMENT id。
如果您使用mysql_query()将数据插入到与会者表中,请在下一行中写入mysql_insert_id(),它将为您提供最近生成的与会者id,将其存储在一个变量中,并使用此变量再次插入到注册表中。类似的东西:
$q = "INSERT INTO attendee (attendee_name, attendee_email, attendee_tel) VALUES ( '$fullname', '$email', '$tel' )";
$rc=mysql_query($q);
$a_id=mysql_insert_id();
现在用$a_id再次插入"registration"表;