2

mysql_insert_id()のマニュアルには

mysql_insert_id() は最後に実行されたクエリに作用するため、値を生成するクエリの直後に必ず mysql_insert_id() を呼び出してください。

このステートメントは、スコープを示すものではありません。サーバー全体の値ですか?多くのスクリプトまたは 1 つのスクリプトの多くのインスタンスを実行しているサーバーは、それを呼び出すスクリプトによって実行された最後の挿入によって生成されなかった mysql_insert_id() の値を返すことができますか?

4

3 に答える 3

3

mysql_insert_id() のスコープは MySQL 接続です。ではなくuser + password、現在のスクリプトの実際の接続です。(MySQL 接続は mysql_insert_id のパラメーターにもなり得ることに注意してください)

MySQL 接続を閉じて再度開くと、mysql_insert_id() は前の接続で挿入された ID の ID を返しません。

追加直後に ID が挿入されたが、別のスクリプト実行 (つまり、別の接続) によって mysql_insert_id() は ID を返します。実際に作成された後ではなく、別の接続で作成された ID ではありません。

例 :

$c1 = mysql_connect($srv, $usr, $pwd);
$c2 = mysql_connect($srv, $usr, $pwd);

$sql = "INSERT INTO table1 (col1, col2) VALUES('x', 'y') "
mysql_query($sql, $c1); // first insert
mysql_query($sql, $c2); // second insert

$id1 = mysql_insert_id($c1);
$id2 = mysql_insert_id($c2);

$id1 は最初に挿入される ID になり、$id2 は後に挿入される ID になります。

于 2012-04-11T22:44:18.407 に答える
1

はい、次の記事を参照してください:最後に挿入された行の一意の ID を取得する方法

LAST_INSERT_ID() の場合、最後に生成された ID が接続ごとにサーバーに保持されます。別のクライアントによって変更されることはありません。別の AUTO_INCREMENT カラムを非マジック値 (つまり、NULL でも 0 でもない値) で更新しても、変更されません。複数のクライアントから LAST_INSERT_ID() および AUTO_INCREMENT 列を同時に使用することは完全に有効です。各クライアントは、クライアントが最後に実行したステートメントの最後に挿入された ID を受け取ります。

于 2012-04-11T22:32:05.207 に答える
1

スコープは接続ごとです。スクリプトを実行するたびに個別の接続が開かれる場合 (これは通常発生することです)、それらは個別のスコープを持ちます。

于 2012-04-11T22:33:06.770 に答える