【发布时间】:2014-03-19 23:58:23
【问题描述】:
如标题所示,当使用相同的 DSN 参数(用户名、主机名、密码等)创建多个 PDO 对象时,所有实例是否都具有到数据库的相同链接?当然,它们都是 PDO 的不同实例,但在较低级别上,与它们相关联的数据库的链接是否相同?
这就是它的工作原理,当使用相同的参数多次调用 mysql_connect() 时,如果使用相同的参数调用会返回相同的链接。
http://uk1.php.net/mysql_connect
如果使用相同的参数对 mysql_connect() 进行第二次调用,则不会建立新链接,而是返回已打开链接的链接标识符。
根据要求更新示例...
$con_1 = new PDO($db_type . ':host=' . $db_host . ';dbname=' . $db_name, $db_user, $db_pass);
$con_2 = new PDO($db_type . ':host=' . $db_host . ';dbname=' . $db_name, $db_user, $db_pass);
$con_1 和 $con_2 与实际数据库的链接是否相同?
更新 由于 $db 被覆盖,因此删除了基准测试。
【问题讨论】:
-
请提供您正在尝试的代码示例。
-
只有在将
PDO::ATTR_PERSISTENT构造函数属性设置为true时才会重新使用它们。见php.net/manual/en/pdo.connections.php#example-906 -
@Phil 将其作为答案发布。
-
@Barmar 它只是指向手册的链接。在我看来,RTFM 不是 StackOverflow 的合适答案,除非相关手册页写得不好并且需要进一步解释。
-
@Phil,是的,但是建立持久数据库连接不是自找麻烦吗?根据手册,它们“不会在脚本末尾关闭” - 我想在脚本末尾关闭它们,但是如果在同一请求生命周期内再次请求,我希望它重用现有连接...数据库连接应该是短暂的,但是在请求生命周期内重用它确实有意义...并在脚本结束时关闭