1

mysql_insert_id について愚かな質問があるかもしれません...

mysql_query("INSERT INTO") の後に mysql_insert_id を使用して、クエリの最後に挿入された ID を取得する必要があります。

mysql_insert_id は、前のクエリで生成された ID を取得しますが、私の質問は...

次のコードを含む test.php という名前の 1 つの php ファイル

mysql_query("INSERT INTO table (FirstName, LastName) VALUES ('" . $_POST['FirstName'] . "', '" . $_POST['LastName'] . "'); ")
$lastId = mysql_insert_id();
...continues some code using $lastId

test.php ファイルが異なる場所や異なるブラウザーから同時に呼び出された場合はどうなりますか? または、INSERT INTO クエリを含む他の php ファイルが同時に呼び出された場合はどうなりますか?

Id は実際に mysql_insert_id() を取得しますか? まれな確率と関係がありますか?

理解できるようになるかどうかはわかりません...

4

3 に答える 3

4

PHP のマニュアルには、 の値はmysql_insert_id()最近生成されたAUTO_INCREMENT値のみを返すと記載されています。

MySQL SQL 関数の値には、LAST_INSERT_ID()常に最後に生成されたAUTO_INCREMENT値が含まれ、クエリ間でリセットされません。

MySQL のマニュアルAUTO_INCREMENTには、接続ごとに基づいて最後の値が返されると記載されています。

生成された ID は、接続ごとにサーバーに保持されます。これは、関数によって特定のクライアントに返される値が、そのクライアントによって列にAUTO_INCREMENT影響を与えた最新のステートメントに対して生成された最初の値であることを意味します。この値は、他のクライアントが独自の値を生成したとしても、影響を受けることはありません。この動作により、各クライアントは、他のクライアントのアクティビティを気にせず、ロックやトランザクションを必要とせずに、独自の ID を取得できるようになります。AUTO_INCREMENTAUTO_INCREMENT

さらに、関数は非推奨mysql_になっているため、関数の使用を停止する必要があります。

于 2012-09-17T21:14:18.827 に答える
2

各クライアントは個別の接続に置かれます。渡された/現在の接続に基づいて、最後のクエリのmysql_insert_id()を取得します。そのため、複数のスクリプトが問題を引き起こすことを心配する必要はありません。idinsert

また、上記のコードから、スクリプトは SQL インジェクション攻撃に対して脆弱です。ユーザー入力をエスケープするか、PDO/MySQLi を使用してください。

于 2012-09-17T21:15:33.273 に答える
1

接続の最後のクエリから自動インクリメントIDを取得します。接続を越えないため、同時に実行されている2つのスクリプトに害はありません。

補足:オプションがある場合は、非推奨のmysqlライブラリの代わりにmysqliまたはPDOライブラリを使用してください。

于 2012-09-17T21:09:22.213 に答える