-1

こんにちは、私は以下のコードを使用して mysql 自動インクリメント値を取得していますが、2 人以上のユーザーが同時に行 2 の異なるテーブルを挿入しようとすると、全員が同じ番号を取得し、エラーが発生します。この問題を処理する方法はありますか?たとえば、user1 が insert.php で最後の番号 100 を取得すると同時に、user2 が insert.php で最後の番号 100 を取得する場合など、あなたの助けとアイデアに感謝します。ヘルプ。

<input id="id" class="text-input small-input required" name="id" size="20" type="text" readonly="readonly" value="<?php $query = mysql_query( "SHOW TABLE STATUS LIKE 'a'" );
$results = mysql_fetch_object( $query );
echo $results->Auto_increment;
?>">  </p>
4

2 に答える 2

4

そこでクライアント側で一体何をしているのですか?

ユーザーのIDはユーザーに表示されないようにする必要があります。ユーザーテーブルのid列は、自動インクリメントに設定する必要があります。これはphpMyAdminなどで実行できます。ユーザーがアカウントを作成すると、ユーザーレコードを作成するINSERTは、自動インクリメントの「id」フィールドを使用して、新しい一意のユーザーIDを自動的に生成します。その後、ユーザーレコードを作成した直後に、mysql_insert_id()を使用して作成された最後のIDを取得できます。

$query = 'INSERT INTO users (name, email) VALUES ('.$name.', '.$email.')';
mysql_query($query);
$user_id = mysql_insert_id();

http://php.net/manual/en/function.mysql-insert-id.php

于 2012-02-24T21:43:55.400 に答える
1

行を挿入する場合は、自動増分値を決定しようとしないでください。代わりに、挿入ステートメントでid列について言及しないでください。そうすれば、データベースは競合を引き起こすことなく、次の自動増分値を取得します。

挿入されたばかりのIDを知りたい場合はmysql_insert_id()、挿入クエリの後に使用できます。これにより、挿入されたばかりの行のID値が得られます。

于 2012-02-24T21:44:41.623 に答える