我正在使用 mysqli 创建到数据库的连接,使用 OOP 方法。有没有办法让它表现得像 mysql_connect,它有一个 $new_link=false,让它为这个脚本中的每个人返回相同的连接,即使他们创建了一个新实例?
这是我如何连接的示例:
class DB extends mysqli {
public function __construct() {
$server_params = $this->server_params;
if (!$server_params) {
throw Exception('No server params for server: '.$server);
}
@parent::__construct($server_params['host'], $server_params['user'], $server_params['pass'], $server_params['db'], $port, $socket);
if ($this->connect_errno != 0){
throw new Exception($this->connect_error, $this->connect_errno);
}
}
}
创建两个实例只是调用
$db = new DB;
来自同一脚本中不同 namespace 的两次。
我知道我可以创建单例和/或使用依赖注入(inject),但想知道是否可以直接在连接请求中完成。
最佳答案
让两个不同的对象包含同一个 SQL 数据库连接通常不是一个好主意。如果您在一个实例中启动事务,如果您在另一个实例中提交会发生什么?如果它们代表同一数据库上的不同 session ,那很好,因为 session 彼此隔离(每个 session 都可以启动自己的事务,而不会冒另一个 session 进入无意义状态的风险)。在那种情况下,您只需为要打开的每个连接创建新实例。
$db1 = new mysqli("example.com", "user", "password", "database");
$db2 = new mysqli("example.com", "user", "password", "database");
如果您需要对同一个连接和 session 的多个引用,那么您需要做的就是:
$db1 = new mysqli("example.com", "user", "password", "database");
$db2 = $db1;
$db1 和 $db2 都指向同一个对象,因此指向同一个连接。
关于php - mysqli:像 $new_link=false 一样调用构造函数两次时返回相同的连接;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17521271/