5

私は 3 ~ 4 年前にプログラミングを行っていましたが、2005 年の PHP セキュリティ ブックで、mysql_insert_id を使用して last_inser_id を取得することの安全性について言及していたことを覚えています。

この本では、サーバーに同時に複数の要求 (数千) がある場合、last_insert_id の取得が間違っていて、ユーザーの ID が他のユーザーを指している可能性があると述べています。

今は 2013 年ですが、皆さんがこれについて、特に codeigniter insert_id() を使用して言わなければならないことは何ですか。

pd: 他の場所で質問に関する関連情報を見つけようとしましたが、具体的なものは見つかりませんでした。

4

1 に答える 1

7

その本を書いた人は誰でもがらくたでいっぱいです. LAST_INSERT_ID()接続に固有であり、接続はスクリプトの現在の呼び出しに固有です。大量の飲酒をした後、PHP のソース コードを書き直さない限り、これを打破する方法は思い浮かびません。

おそらく、永続的な接続を使用していて最後の接続で挿入が行われ、挿入が成功する前に自分で呼び出した場合[戻り値を確認しますよね? ] の場合、悪い値が得られる可能性があります。しかし、これが可能であると想像するのは非常に困難です。LAST_INSERT_ID()

LAST_INSERT_ID()実行した直後に実行している限り、INSERT常に適切な値が返されます。

本当に必要な場合は、次の方法でそれを破ることができます。

$db_obj->insert('some data');
$db_obj->some_function_that_also_inserts_but_i_forgot_it_does_that('derp');
$id = $db_obj->last_insert_id();
于 2013-10-23T21:00:23.313 に答える