说我有这个代码:
<?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中运行,因此,如果我打开浏览器到此页面并在mysql中运行SHOW PROCESSLIST
,那么我会看到1个连接。页面加载完成后(30秒后),我仍然会在MySQL中看到该连接(因为它是永久的,可以)。
但是现在,如果我在同一页面上打开2个标签页(无论是否使用相同的浏览器,由于它没有影响,我们在这里都不在乎),那么我会看到 2 个连接在SHOW PROCESSLIST
中。
所以我想PHP使持久连接保持打开状态,但是不会在“ PHP实例”之间共享它。有办法吗?要为2个PHP实例运行的mysql服务器建立一个单一连接(无论该连接是否持久,但我怀疑非持久连接是否可以工作)?
答案 0 :(得分:0)
PHP没有真正的连接池。每个“ PHP实例”都保留并重用其自己的持久连接。
无法让多个PHP进程/线程共享它们的连接。
也许有一个第三方代理可以做到这一点,但这并不是很重要:)
由于通常不希望将所有内容都限制在有限数量的MySQL线程中,因此共享少量连接也是没有好处的。