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

55ooxyrt  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(270)

在将mysqli的php功能转换为使用pdo的过程中。我做了几页cms的概念证明,这使我进入了持久连接的兔子洞。
为了避免混乱,本质上我使用mysqli\u 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\u pass方法从远程服务器上的文本文件获取密码。该类只是通过$pdo=class::connect()调用的;
mysqli连接是similar,但是它只建立了一次,并且存储在会话中。以相同的方式检索密码,并对数据库位置和名称使用预设常量。

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

我希望这有帮助!

hrysbysz

hrysbysz1#

您可以创建一个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

相关问题