对于 MySQL/PDO,我相信 PDO::lastInsertID() 返回最后插入的连接对象的 ID。我的 PDO 对象包含在任何方法都可以调用的单例对象中,因此每个对服务器的 HTTP 请求只有一个数据库连接。
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 要求最后插入的 ID 期望查询 A 的结果,而不是获取查询 B
- 方法 B 要求最后插入的 ID 期望并获得查询 B 的结果
已经阅读了这些,没有找到答案:
PDO Last Insert ID 总是正确的? http://php.net/manual/en/pdo.lastinsertid.php