如何在一个表中插入相同的LAST_INSERT_ID()以创建多个记录;
问题描述:
我正在编程一个网站,使用ASP.NET,C#以及使用MYSQL。 我需要能够用相同的child_id记录两行;如何在一个表中插入相同的LAST_INSERT_ID()以创建多个记录;
我的问题是与这一个声明,它插入一行,并跳过最后一个。
//data.ChldrenRecord.Service contain two records
// babysit, and tutor
foreach (string s in data.ChildrenRecord.Services)
{
query += (" INSERT INTO ServiceChildren SET service='" + s + "', child_id=LAST_INSERT_ID();");
}
所以表应该是这个样子
id service child_id
1 babysit 1
2 tutor 1
我用LAST_INSERT_ID(),因为child_id是一个外键。我在主键是child_id的另一个表中创建一条记录。之后,我使用LAST_INSERT_ID()引用该记录主键child_id,以便我可以在我的ServiceChildren表中使用它。
,因为它代表我的表如下:
id service child_id
1 babysit 1
我觉得我在正确的轨道上了。如果我直接登录到数据库中,这条语句的工作原理:
SET @last_id = LAST_INSERT_ID();
//then insert statements
INSERT INTO ServiceChildren(service, child_id) VALUES('babysit', @last_id);
INSERT INTO ServiceChildren(service, child_id) VALUES('tutor', @last_id);
但在我的C#,ASP.NET代码行 SET @last_id = LAST_INSERT_ID(); 不做任何事情,甚至用先前的插入语句填充表。
答
好的,我发现了我的问题。我需要将允许用户变量= True连接字符串中允许创建和使用@last_id。
从上一个查询中获取LAST_INSERT_ID值,并在循环中使用该值。但是,请考虑将ASAP切换为参数化查询。字符串连接只是一个等待发生的灾难(阅读关于Sql注入) – Steve
顺便说一下,您正在使用UPDATE的语法。这将不会使用INSERT语句 – Steve
我不得不使用字符串连接,因为我找不到在ASAP中使用的正确的参数化查询。我知道这一点,因为它不停地插入'@Service'而不是保姆或导师。 – Bernardo