php - mysqli:像 $new_link=false 一样调用构造函数两次时返回相同的连接;

标签 php mysql database mysqli

我正在使用 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/

相关文章:

MySQL:如何进行更快的 IP 范围查询?地理IP

php - 电商成员(member)付费后订阅

java - 在weka中打开arff文件时出错

javascript - 如何将值从 php 传递到 jquery 函数我的代码如下

php - 需要帮助让 Fine Uploader PHP 服务器示例正常工作

php - 从 Google 电子表格中的多值组合列表创建唯一对列表

php - PDO PHP - PDOException - 数值超出范围 : 1264 Out of range value for column 'customer_id' at row 1

php - 无法执行 PDO 查询

php - 一个人的mysql排名和查询

PHP fatal error : Call to a member function diff() on a non-object in. .. 比较数据库中的日期时间