使用一中的值插入到两个SQL表中


Inserting into two SQL tables using a value from one

我正在使用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"表;