![](/img/trans.png)
[英]How can i get a auto generated primary key id from a table after completion of insertion query?
[英]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_id
和PDO::lastInsertId
方法。 请注意,这些是针对每个连接的 ,因此即使您同时从多个单独的请求中进行了多次插入,查询也是安全的。
触发插入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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.