【问题标题】:Does PHP PDO has the same link when called with same DSN?使用相同的 DSN 调用 PHP PDO 是否具有相同的链接?
【发布时间】: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,是的,但是建立持久数据库连接不是自找麻烦吗?根据手册,它们“不会在脚本末尾关闭” - 我想在脚本末尾关闭它们,但是如果在同一请求生命周期内再次请求,我希望它重用现有连接...数据库连接应该是短暂的,但是在请求生命周期内重用它确实有意义...并在脚本结束时关闭

标签: php mysql pdo


【解决方案1】:

不,默认情况下 PDO 将打开一个新连接 - 即使您使用相同的 dsn(和凭据)调用它

但请查看您问题下方的@Phil 评论。 (谢谢!:) ...如果您想重用连接,您可以将PDO::ATTR_PERSISTENT 与构造函数的$attributes 参数一起传递,并将其设置为true

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多