Оператор, подготовленный узлом: используйте LAST_INSERT_ID во втором запросе с переменными элементами - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь записать в две таблицы, используя два оператора INSERT один за другим.

Второй оператор INSERT должен использовать LAST_INSERT_ID() первого оператора. Для этого я назначаю переменную @last_id_invoices. Как я могу получить доступ к этой переменной в подготовленном операторе, когда число строк, которые должны быть записаны, является переменной?

В приведенном ниже примере кода используются значения stati c, но идея заключается в том, что и customer, и items будет поступать из другого сценария, поэтому неизвестно, сколько будет 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];

1 Ответ

0 голосов
/ 27 января 2020

Вы почти у цели. Вы можете передать переменную второй вставке следующим образом:

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, ?);\
    ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...