0

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

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

4

2 回答 2

4

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

于 2013-09-04T22:49:14.337 回答
0

mysql 和 mysqli 在触发 insert-sql 后具有刚刚插入的记录的 $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

于 2013-09-04T22:54:26.860 回答