使用相同凭据的两个单独的连接是否共享一个线程?

时间:2018-10-23 15:52:53

标签: php mysql pdo

在PHP中转换mysqli_功能以利用PDO的过程中。我已经完成了几页CMS的概念验证,这使我陷入了持久连接的困境。

为避免漫游,本质上来说,我正在使用mysqli_connect的旧方法连接到mysql服务器,并创建了一个新的PDO资源,但是,我只看到一个打开的线程。由于它们都使用相同的凭据进行连接,因此它们是否共享打开线程?任何其他信息也将受到赞赏。

谢谢!

不幸的是,该代码是政府所有的,但如果有帮助,我可以发布一些简短的摘要。

数据库类的连接方法:

try {
        $dsn = "mysql:host="._DBLocation.";dbname="._DBName.";charset=utf8mb4";
        $options = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
            PDO::ATTR_PERSISTENT                 => true
        ];

        $dbh = new PDO($dsn,_DBUser,self::db_pass(),$options);
        self::$conn = $dbh;
        return $dbh;

    }
    catch (exception $e) {
        print $e->getMessage();
    }

db_pass方法从远程服务器上的文本文件获取密码。该类仅通过$ pdo = CLASS :: connect();

调用

mysqli连接很简单,但是建立一次并存储在会话中。密码检索的方式相同,并且还使用预设常量来指定数据库的位置和名称。

$_SESSION['sql'] = mysqli_connect(_DBLocation,_DBUser,$passwordVar);

我希望这会有所帮助!

1 个答案:

答案 0 :(得分:0)

您可以创建一个DbHandler类,并在需要时调用适当的变量。

注意:这是示例代码-您可能需要更改以适合您的代码库。

class DbHandler
{
    protected $pdo;
    protected $mysqli;

    public function __construct($pdo, $mysqli)
    {
        $this->pdo = $pdo;
        $this->mysqli = $mysqli;
    }
}

然后像这样使用它:

$dbHandler = new DbHandler(new PDO(.. pdo deets ..), mysqli_connect(.. mysqli deets ..));

print_r($DbHandler->pdo); # will output a PDO object
print_r($DbHandler->mysqli); # will output whatever mysqli is.. an array? Not sure