0

2 番目のクエリを使用せずに、最後の Insert ステートメントの結果の ID を取得するにはどうすればよいですか?

データベースの最後の行を選択して、探しているものを取得できることはわかっています...時々。問題は、2 人のユーザーが同時に挿入すると、間違った結果が得られるのではないかと心配です。

疑似コード例:

User 1 - Insert Record A
User 1 - Select last Record
User 1 - Record A Selected

疑似マルチユーザーの問題:

User 1 - Insert Record A
User 2 - Insert Record B
User 1 - Select last Record
**User 1 - Record B Selected**
User 2 - Select last Record
User 2 - Record B Selected
4

2 に答える 2

2

mysql_insert_id()またはを使用mysqli_insert_idして、最後に挿入された ID を取得できます

于 2013-05-26T23:30:41.853 に答える
1

ユーザーが別の接続を使用している場合、問題は発生しません。これは、さまざまな要求で常に当てはまるはずです。ただし、同じスクリプト内であっても、異なる接続を利用することで分離が保証されます。

証明:

$connection_for_user1 = new MySQLi('localhost', 'user', 'pass', 'test');
$connection_for_user2 = new MySQLi('localhost', 'user', 'pass', 'test');

$result_for_user1 = $connection_for_user1->query("INSERT INTO test_table (data) VALUES ('A')");
$result_for_user2 = $connection_for_user2->query("INSERT INTO test_table (data) VALUES ('B')");

$record_id_for_user1 = $connection_for_user1->insert_id;
$record_id_for_user2 = $connection_for_user2->insert_id;

echo "User 1: record $record_id_for_user1\n";
echo "User 2: record $record_id_for_user2\n";

結果:

User 1: record 1
User 2: record 2
于 2013-05-28T12:12:39.577 に答える