私はASP.NET、C#、そしてMYSQLを使ってウェブサイトをプログラミングしています。 同じchild_idを持つ2つの行を記録できる必要があります。同じLAST_INSERT_ID()を1つのテーブルに挿入して複数のレコードを作成する方法。
私の問題は、この1つのステートメントでは、1行を挿入し、最後をスキップします。
//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();");
}
ので、表にはchild_idが外部キーであるので、私はLAST_INSERT_ID()を使用し、この
id service child_id
1 babysit 1
2 tutor 1
ようになるはずです。プライマリキーが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 CODE THE LINE IN SET @last_id = LAST_INSERT_ID();:私は、データベースに直接ログインした場合、この文は動作します は何もしません。以前の挿入ステートメントでテーブルにデータを入力します。
前のクエリからLAST_INSERT_ID値を取得し、その値をループ内で使用します。ただし、ASAPをパラメータ化されたクエリに切り替えることを検討してください。文字列の連結はちょうど起こるのを待っている災害です(Sql Injectionについて読む) – Steve
ちなみに、あなたはUPDATEの構文を使用しています。それはINSERTステートメントではうまくいきません – Steve
すぐに使用する正しいパラメータ化クエリが見つからないため、文字列連結を使用する必要がありました。私はこれがベビーシッターや家庭教師の代わりに '@Service'につながっていたので、これを知っています。 – Bernardo