Php 如何将Mysql一次插入到两个表中,其中tableA具有唯一的userID,tableB具有重复的userID

Php 如何将Mysql一次插入到两个表中,其中tableA具有唯一的userID,tableB具有重复的userID,php,mysql,mysqli,Php,Mysql,Mysqli,我有下面的问题,我正在分别回答 SQL1: INSERT INTO tableA (product) VALUES ('machine1'), ('machine2') SQL2: INSERT INTO tableB (userid, name) VALUES (12345, 'Jan Smith'), (12345, 'Bert Smith'), (12346, 'Pieter King'), (12346, 'Martin King') 表格a在用户ID上有一个唯一的主

我有下面的问题,我正在分别回答

SQL1:
    INSERT INTO tableA (product) VALUES ('machine1'), ('machine2')

SQL2:
    INSERT INTO tableB (userid, name) VALUES (12345, 'Jan Smith'), (12345, 'Bert Smith'), (12346, 'Pieter King'), (12346, 'Martin King')
表格a在用户ID上有一个唯一的主键(自动递增)tableB还有一个列userID,其中userID不是唯一的

目前,我使用mysqli last inserted ID从SQL1获取第一个插入产品的第一个用户ID,在本例中是machine1。在这种情况下,将返回数字12345,并将用于SQL2

我目前正在获取第一个用户ID,并将其用于第二次SQL插入,同时简单地为下一个产品添加+1,假设为SQL1的行提供的用户ID都是连续的。同时,还有其他插入,这种方法无效,也不起作用。此外,这是一种危险的方法,因为如果两个SQL查询中的任何一个失败,系统就会崩溃


我的问题是:“如何将上述两个插入查询合并为1?”

我认为您可以使用
select last_INSERT_id()
在MySQL中选择最后一个插入的自动递增id

我没有对此进行测试,但您可以将其应用到查询中,正如Nicolas在其示例中所示

我看到您也在产品购买历史记录中插入名称,或类似的内容。 你绝对应该避免这样。最好只插入用户ID,然后将其设置为用户表的外键。

插入tbl(自动,文本)值(空,'text'); 插入tbl2(id,文本)值(最后插入id(),'text')


您可以将这两个insert都放在同一事务中。

您介意给出tableA和tableB的真实名称吗,这样更容易使用。我需要为同一ID在table2中插入多行,这种方法似乎无法处理。将ID存储在MySQL变量中如何,即设置@tbl1_ID=LAST_insert_ID();然后使用@tble1_id.(cf)。我用php生成了这两个查询并添加了(LAST_INSERT_id()+x),其中是一个从0到必须为每个userid添加条目的次数的数字