MySQL/PDO では、PDO::lastInsertID() が接続に対して最後に挿入されたオブジェクトの ID を返すと思います。どのメソッドでも呼び出すことができるシングルトン オブジェクトに PDO オブジェクトが含まれているため、サーバーへの HTTP 要求ごとに 1 つのデータベース接続しかありません。
class Database {
public $db;
private static $dsn;
private static $instance;
private function __construct()
{
$this->db = new PDO( self::$dsn );
}
public function __destruct()
{
$this->db = null;
}
public static function getInstance()
{
if ( !isset( self::$instance ) ) {
$object = __CLASS__;
self::$instance = new $object;
}
return self::$instance;
}
}
$database = Database::getInstance();
$handle = $database->db->prepare(); // etc etc etc
間違っている場合は訂正してください。ただし、Apache への各 HTTP リクエストは個別の PHP インスタンスを生成すると考えているため、これらの PHP インスタンス間でシングルトンが共有されるとは思いません。また、コードに同時実行性がないため、そうすべきだと思います。直線的に起こっています。したがって、次のようなケースはあり得ないと思います。
- メソッド A はクエリ A で行を挿入します
- メソッド B はクエリ B で行を挿入します
- メソッド A は、クエリ A の結果を期待して最後に挿入された ID を要求し、代わりにクエリ B の結果を取得します。
- メソッド B は、最後に挿入された ID を要求し、クエリ B の結果を期待して取得します。
すでにこれらを読んでいますが、答えは見つかりませんでした:
PDO Last Insert ID は常に正しいものですか? http://php.net/manual/en/pdo.lastinsertid.php