PHPスクリプト内からMySQLへINSERT文でデータ登録する際、登録したデータに対してAutoIncrementで割り振られたプライマリ・キーの値を取得するにはどうしたら良いでしょうか?*扱っているのは一般ユーザーからの問合せフォームですが、プライマリ・キー以外にはデータを特定する一意のキーは無さそうです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:bell87uta No.1

回答回数6ベストアンサー獲得回数0

ポイント16pt

これで取得できます。

id:dak

おお、完璧っぽいです。これ、複数ユーザーによる処理が同時発生してる場合でも、正確に自分のスクリプトが直近に処理したIDを返してくれるんでしょうか?

2005/06/17 00:07:27
id:jazzanova No.2

回答回数27ベストアンサー獲得回数0

ポイント16pt

URLはダミーで。


直前のIDを取得するにはPHPの

mysql_insert_id関数を使用します。

例:

$query = ”insert into hoge values(’’,’hoge’,12345)”;

$rs = mysql_query($query);

$id = mysql_insert_id();

id:dak

既出ですが、サンプルコードが入ってて有用なのでポイント付けさせて頂きます。ありがとうございます!

2005/06/17 00:08:13
id:xtra No.3

回答回数43ベストアンサー獲得回数1

ポイント16pt

登録する直前のIDを取得して、それに手動でインクリメントした値を表示する、という方法ではダメですか?

id:dak

あ、それ上手いですね!でも、やはり最初の回答と同じ、同時発生している他の処理との混同が気になります。

2005/06/17 00:09:03
id:xxxxxxxxxxxxxxx No.4

回答回数6ベストアンサー獲得回数0

ポイント16pt

LAST_INSERT_ID()を使ってみてはいかがでしょうか? 


データを登録した際に、接続を切らず連続して、

SELECT LAST_INSERT_ID();

を発行すればよいかと思います。


上記URLの中ほどやや下に説明がありました。

id:dak

ありがとうございます。やはり疑問点は、前に同じです。

2005/06/17 00:10:24
id:jazzanova No.5

回答回数27ベストアンサー獲得回数0

ポイント25pt

2度目の回答です。

同時発生している他の処理との混同が気になるとの事なので。

この回答に対するポイントはいらないです。


MySQLサーバはクライアントからの接続要求があるとスレッドを生成し、そのスレッドがクライアントのSQLを処理します。

最後に生成されたIDはスレッドごとにサーバに保持されます。

その為、確実に自分が最後に生成したIDを返してくれます。

id:dak

なるほど!疑問が解決しました。ポイント不要との事ですが、当然お付けします。非常に分かりやすい回答を有難うございました。

2005/06/17 22:06:38

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 2011/04/11 PHP: mysql_insert_id - Manual これを使えばinsertしてすぐにそのIDを取得出来る。 用法 PHPスクリプト内からMySQLへINSERT文でデータ登録する際、登録し.. - 人力検索はてな
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません