在我的数据库中使用两个表并将一个HTML表单的数据拆分为两个不同的查询,我遇到了一个问题,该问题标识了第一个查询中的主键,以便在第二个查询中用作外键。以下是我在伪代码中所说的内容:
$FormData1, $FormData2, ... INSERT INTO table1 //primary key is auto-generated int
$key = SELECT primaryKey FROM table1 WHERE *** Uh-oh!
$otherFormData1, $otherFormData2, $key ... INSERT INTO table2
鉴于需要设计系统以便可以发生并发事务,我该如何解决这个问题?如果我知道它一次只能运行一个实例,那么我可以查询添加的最后一条记录,但我觉得这对我的问题来说是一个非常“整洁”(甚至是安全的)解决方案
答案 0 :(得分:4)
您可以查询LAST_INSERT_ID()
,但可以使用mysqli::insert_id
和PDO::lastInsertId
方法。请注意,这些是连接,因此即使您同时从单独的请求中进行多次插入,也可以安全地进行查询。
答案 1 :(得分:0)
$sql = 'INSERT INTO table1 (field1, field2) VALUES ("aaa", "bbb")';
$mysqli = new mysqli();
$mysqli->query($sql);
$pKey = $mysqli->insert_id;
现在你的$ pKey有一个你刚刚插入的行的id值。