php - 两个 PHP 实例(在 Apache 中)可以共享同一个 PDO 持久连接吗?

标签 php mysql

假设我有这个代码:

<?php

$pdo = new PDO(
        'mysql:host=127.0.0.1;dbname=test_sql',
        'root',
        '',
        array(
            PDO::ATTR_PERSISTENT => true));

header('Content-Type: text/plain');

for ($i = 30; $i > 0; $i--) {
    echo 'SQL says ' . $pdo->query('SELECT CONCAT(CONNECTION_ID(), "/", NOW()) AS x')->fetchAll(PDO::FETCH_ASSOC)[0]['x'] . ' END|';
    sleep(1);
}

它在 Apache 中运行,因此如果我打开浏览器到此页面并运行 SHOW PROCESSLIST在 mysql 中,我看到 1 个连接。一旦页面加载完成(30 秒后),我仍然会在 MySQL 中看到该连接(因为它是持久的,好吧)。

但是现在,如果我在同一页面上打开 2 个选项卡(无论是否是同一个浏览器,我们在这里不关心它,因为它没有影响),然后我会看到 2 个连接在 SHOW PROCESSLIST .

所以我认为 PHP 保持持久连接打开,但不会在“PHP 实例”之间共享它。有办法这样做吗?与为 2 个 PHP 实例运行的 mysql 服务器有 1 个单一连接(无论此连接是否是持久连接,但我怀疑非持久连接是否有效)?

最佳答案

PHP 没有真正的连接池。每个“PHP 实例”都保留并重用其自己的持久连接。

无法让多个 PHP 进程/线程共享其连接。

也许有一个第 3 方代理可以执行此操作,但这并不真正重要:)

由于通常不希望将所有内容都限制在有限数量的 MySQL 线程中,因此共享少量连接也没有好处。

关于php - 两个 PHP 实例(在 Apache 中)可以共享同一个 PDO 持久连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54199172/

相关文章:

mysql - 了解 InnoDB 锁定和事务模型

php - 如何使用关系在laravel数据库中插入嵌套的二维数组

php - 使用关键字 'use' 有条件地导入类

java - 如何解密mysql中的消息?

php - 为什么这个 PHP mysql_query 没有从我的数据库中获取正确的信息?

php - 解析并显示MySQL数据到php中

php - 如何关闭 xampp 中的通知报告?

php - 无论如何要简化 foreach 循环的老鼠巢吗?

php - 在 Wordpress 中获取并显示当前用户的特定元数据项

php - 将数据库迁移到新服务器时,MySQL 错误字段列表中的未知列(Windows)