【发布时间】:2017-06-21 08:40:11
【问题描述】:
我正在使用 ASP.NET、C# 以及 MYSQL 编写网站。 我需要能够记录具有相同 child_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(); 不做任何事情,甚至使用先前的插入语句填充表。
【问题讨论】:
-
从上一个查询中获取 LAST_INSERT_ID 值并在循环中使用该值。但是考虑尽快切换到参数化查询。字符串连接只是等待发生的灾难(阅读关于 Sql Injection)
-
顺便说一下,您正在使用 UPDATE 的语法。这永远不会与 INSERT 语句一起使用
-
我不得不使用字符串连接,因为我找不到要在 ASAP 中使用的正确参数化查询。我知道这一点是因为它一直插入“@Service”而不是保姆或导师。