我有一个单例类 DataBase
用于共享数据库连接:
class DataBase
{
private static $mysqli;
final private function __construct() {}
public static function getInstance()
{
if (!is_object(self::$mysqli)) self::$mysqli = new mysqli($H,$U,$P,$B);
return self::$mysqli;
}
private function __destruct()
{
if (self::$mysqli) self::$mysqli->close();
}
private function __clone() {} //no cloning in singleton
}
我在许多其他类中使用这个单例对象,并且在每个类的构造函数中从单例中检索数据库连接,例如:
class Customer
{
public $db;
function __construct()
{
$this->db=DataBase::getInstance();
}
public function create()
{
$this->db->query('INSERT INTO customers SET ... WHERE id=100'); //e.g.
}
}
并且
class Product
{
public $db;
function __construct()
{
$this->db=DataBase::getInstance();
}
public function create()
{
$this->db->query('INSERT INTO products SET ... WHERE id=200'); //e.g.
}
}
由于我所有的类都共享单例类提供的相同连接,所以我的问题是,我能否从一个类开始数据库事务,并从另一个类回滚/提交它。我的意思是,下面的代码是否正确地创建了一个数据库事务,用于在一个数据库事务中创建客户和产品(类模拟后面的数据库记录):
由于我所有的类都共享单例类提供的同一连接,因此我的问题是,我能否从一个类开始数据库事务,然后从另一个类回滚/提交它。我的意思是,下面的代码是否正确地创建了一个数据库事务,用于在一个数据库事务中创建客户和产品(类模拟后面的数据库记录):
$Customer=new Customer();
$Customer->db->begin_transaction();
...
$Customer->create();
...
$Product=new Product();
$Product->create();
...
$Product->db->commit();
如果所有用户都共享来自单例类的相同连接,那么此代码将如何在多用户环境中运作?