sql >> データベース >  >> RDS >> Mysql

MySQL用のPDOのlastInsertIdは競合状態ですか?

    MySQLは、あるセッションの最後の挿入IDを別のセッションに返しません。

    http://dev.mysql .com / doc / refman / 5.6 / en / information-functions.html#function_last-insert-id 言う:

    コメントを再確認してください:

    これは、最初からMySQLの動作です。最後の挿入IDを返すことは、競合状態の影響を受けやすい場合、つまり他のセッションでの挿入がセッションを汚染する可能性がある場合は、まったく役に立ちません。

    1つの可能性は、永続的な接続を使用していることです。これは、古いバージョンのPHPには、新しいPHP要求に接続を与え、以前のPHP要求からのセッションスコープの状態へのアクセスを許可するというバグがあったためです。つまり、ロックとトランザクション、一時テーブルとユーザー変数、最後の挿入IDなどは、後続のPHPリクエストに対して存続する可能性があります。これらの問題は、mysqlndドライバーを使用してPHP5.3で解決する必要があります。持続的接続は初期状態に「リセット」する必要があります。

    もう1つの考えられる説明は、それが実際に正しく機能していて、観察結果が間違っているということです。したがって、慎重かつ系統的にテストすることをお勧めします。

    更新: あなたの答え によると 、この問題はMySQL、PDO、またはlastInsertIdとは何の関係もありませんでした。 PHPコードの出力に不一致はまったく見られなかったようです。また、ChromeDevToolsのネットワークパフォーマンス統計に予期しない数値が見られました。



    1. Oracleの数値関数かどうかを確認します

    2. mysqli_stmt ::bind_param():型定義文字列の要素の数がバインド変数の数と一致しません

    3. OracleデータベースでINTO句を使用して即時実行を使用する方法

    4. WiXからSQLExpressをブートストラップしますか?