MySQL テーブルに行を挿入すると、'id' フィールドが自動インクリメントされ、取得挿入された行の「id」は一般的なタスクです。 1 つのアプローチでは、行を挿入してから一致する行をクエリする必要がありますが、これにより潜在的な競合状態が発生します。
この問題を回避するために、PHP は mysqli_insert_id( ) 関数。指定された MySQL 接続に対して最後に挿入された行の ID を直接取得します。この方法では、競合状態や結果の重複のリスクなしに ID が確実に取得されます。
<?php $link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db'); mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')"); $id = mysqli_insert_id($link); ?>
別の方法では、MySQL の LAST_INSERT_ID() 関数を使用します。これは、複数テーブルの挿入操作内で利用できます。このアプローチでは、行が複数のテーブルに挿入され、LAST_INSERT_ID() 関数によって、単一のクエリ内で変更されたすべてのテーブルに「id」が確実に伝播されます。
<?php mysqli_query($link, "INSERT INTO my_user_table ...; INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())"); ?>
注: 各 MySQL 接続は独自の「ID」追跡を維持し、異なる接続間の競合を防ぎます。
以上がPHP/MySQL で INSERT 後に自動インクリメント ID を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。