我尝试使用$pdo2 = clone $pdo
克隆PDO实例,但在某些PHP版本中出现意外行为:
以下是重现问题的代码:
$pdo1 = new \PDO('sqlite::memory:');
$pdo1->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
echo "PDO 1 is OK\n";
$pdo2 = clone $pdo1;
$pdo2->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_WARNING);
echo "PDO 2 is OK\n";
echo $pdo1->getAttribute(\PDO::ATTR_ERRMODE) === $pdo2->getAttribute(\PDO::ATTR_ERRMODE)
? "❌ The attribute IS changed\n"
: "✅ The attribute IS NOT changed\n";
有没有办法制作PDO对象的独立副本,或者至少只复制dns,用户名和密码?
为什么我需要克隆PDO实例:我需要隔离PDO实例以达到目标:
答案 0 :(得分:0)
无法安全克隆PDO对象。你永远不应该有这样的想法,因为它毫无意义:
因此,如果您想要一个隔离的PDO实例,只需创建它。