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


How can I query for a primary key immediately after inserting a record?

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

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

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

触发

插入SQL后的MySQL和MySQLli具有刚刚插入的记录的$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)