首页 > 解决方案 > 为什么 PHP PDO 在使用持久连接时连接到不同的数据库?

问题描述

我使用 PHP 的 PDO 连接到 MySQL,如下所示:

$driver_options[PDO::ATTR_PERSISTENT] = true;
$db = new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $pass, $driver_options);

我在这台服务器上有 2 个数据库(我们称它们为 database_A 和 database_B),有时会发生非常奇怪的事情。即使 $db_name 100% 设置为“database_A”,也会连接到“database_B”。

它的发生是完全随机的。我可以再次运行相同的脚本 10 次,一切都很好。第 11 次出现此问题。

我从没想过会发生这种情况。这让我很头疼。谁能解释一下?是唯一不使用持久性的解决方案吗?

标签: phpmysqlpdo

解决方案


PDO::ATTR_PERSISTENT 受部分支持,取决于您使用的 PHP 版本和 SQL 服务器。我建议不要在驱动器选项中将此属性设置为 true,因为它不稳定。

我能够复制您的案例,并且发现 ODBC 连接池层正在缓存连接,并且由于您的连接被设置为持久连接,因此每次建立新连接时都会重置缓存。


推荐阅读