4

私はどのように正確に機能するのだろうかと思っていますlastInsertId()。Atm、挿入された行の ID を取得するためにこのように使用しているので、この ID をコードの他のセクションで使用できます。例えば:

$stmt = $db->prepare('INSERT INTO image_table (image_name, image_size) VALUES (:image_name, :image_size)'); 

$stmt->execute(array(
    'image_name' => $photoName,
    'image_size' => $image_size / 1024, 
    ));

$lastInsertId = $db->lastInsertId('yourIdColumn');

さて、私の質問は次のとおりです。

1)このスクリプトはlastInsertId、その特定のスクリプトで実行された SQL 挿入を取得しますか?

2)たとえば、3 人の異なるユーザーが同じテーブルに数ナノ秒の差でデータを挿入したとします。このようなもの:

this script -> Inserts to row id 1
Another user -> Inserts to row id 2
Another user -> Inserts to row id 3

その場合、lastInsertId()そのスクリプトによって挿入された行の最後の ID だったので値 1 を返しますか、それともスクリプトがlastInsertId()関数を実行する行に到達するまでに最後の ID だったので 3 を返しますか?

4

1 に答える 1

4
  1. そのスクリプトの実行における最後のSQL 挿入の ID (別のユーザーの別の競合する挿入ではありません)。

  2. 3 つの挿入がある場合、それが示すようにlastInsertId()を取得します。最後の 1 つで、3 つすべてではなく、2 つではありません...最後の 1 つだけです。挿入を個別に実行してIDを取得するか、そのデータを再度プルする必要がある場合は、挿入基準に基づいて検索することでこれに対処します。異なるユーザー/セッションによる挿入。回答 #1 を参照してくださいlastInsertId()。すべての操作ではなく、特定のユーザー/セッション/実行に適用されます。バックグラウンドで発生している基本的な MYSQL db temp 操作もあり、それが true の場合は ID を返します。

それが役立つことを願っています。

于 2014-01-17T16:53:55.287 に答える