如何在插入记录后立即查询主键?

时间:2013-09-04 22:46:46

标签: php mysql

在我的数据库中使用两个表并将一个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

鉴于需要设计系统以便可以发生并发事务,我该如何解决这个问题?如果我知道它一次只能运行一个实例,那么我可以查询添加的最后一条记录,但我觉得这对我的问题来说是一个非常“整洁”(甚至是安全的)解决方案

2 个答案:

答案 0 :(得分:4)

您可以查询LAST_INSERT_ID(),但可以使用mysqli::insert_idPDO::lastInsertId方法。请注意,这些是连接,因此即使您同时从单独的请求中进行多次插入,也可以安全地进行查询。

答案 1 :(得分:0)

在触发insert-sql之后,mysql和mysqli有一个刚刚插入的记录的$ insert_id - 你不需要查询你的数据库。 你可以用这个:

$sql = 'INSERT INTO table1 (field1, field2) VALUES ("aaa", "bbb")';
$mysqli = new mysqli();
$mysqli->query($sql);
$pKey = $mysqli->insert_id;

现在你的$ pKey有一个你刚刚插入的行的id值。

(详情请见http://pl1.php.net/manual/en/mysqli.insert-id.php