0

データベースで 2 つのテーブルを使用し、1 つの HTML フォームのデータを 2 つの異なるクエリに分割すると、最初のクエリの主キーを 2 番目のクエリで外部キーとして使用するために識別する問題が発生しました。これが私が疑似コードで話していることです:

$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

同時トランザクションが発生できるようにシステムを設計する必要がある場合、この問題をどのように解決すればよいでしょうか? 一度に 1 つのインスタンスしか実行されないことがわかっている場合は、最後に追加されたレコードを照会するだけで済みますが、それが私の問題に対する非常に「きちんとした」(または安全な) 解決策であるとは思えません。 .

4

2 に答える 2

4

を照会できますがLAST_INSERT_ID()、使用できるmysqli::insert_idおよびPDO::lastInsertIdメソッドがあります。これらは接続ごとであることに注意してください。そのため、別々のリクエストから同時に行われる多数の挿入がある場合でも、クエリを実行しても安全です。

于 2013-09-04T22:49:14.337 に答える
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 )

于 2013-09-04T22:54:26.860 に答える