节点准备好的语句:在带有可变项目的第二个查询中使用LAST_INSERT_ID

问题描述 投票:1回答:1

我正在尝试使用两个INSERT语句一个接一个地写入两个表。

第二条INSERT语句应使用第一条语句的LAST_INSERT_ID()。为此,我分配了变量@last_id_invoices。当要写入的行数是变量时,如何在准备好的语句中访问该变量?

下面的示例代码使用静态值,但是想法是customeritems都将来自另一个脚本,因此不知道会有多少items

理想情况下,@last_id_invoices数组中的items将被解释为对语句中变量的引用,而不是字符串,如以下示例所示:

var customer = 123;
var items = [
    ['@last_id_invoices', 11],
    ['@last_id_invoices', 12]
];

var sql = "\
    INSERT INTO invoices (customer) VALUES (?);\
    SET @last_id_invoices = LAST_INSERT_ID();\
    INSERT INTO line_items (invoice_id, product_id)\
    VALUES ?;\
    ";

var inserts = [customer, items];
mysql sql node.js prepared-statement sql-insert
1个回答
0
投票

您快到了。您可以将变量传递给第二个插入,如下所示:

var sql = "\
    INSERT INTO invoices (customer) VALUES (?);\
    SET @last_id_invoices = LAST_INSERT_ID();\
    INSERT INTO line_items (invoice_id, product_id) VALUES (@last_id_invoices, ?);\
    ";
© www.soinside.com 2019 - 2024. All rights reserved.