【问题标题】:PHP PDO::lastInsertId() and ATTR_PERSISTENTPHP PDO::lastInsertId() 和 ATTR_PERSISTENT
【发布时间】:2012-07-12 05:32:29
【问题描述】:

我和this有几乎相同的问题。

根据那篇文章,我知道 PDO::lastInsertId() 从不同的连接调用时是安全的。但是,这是否意味着如果您想在连接期间使用 PDO::lastInsertId(),那么在 PDO 构造函数中应该使用PDO::ATTR_PERSISTENT => true

换句话说,如果我需要使用 PDO::lastInsertId(),我的应用程序是否必须承受“每次脚本需要与数据库通信时建立新连接的开销”,如 PDO Connections and Connection Management 中所述。

【问题讨论】:

    标签: php pdo last-insert-id


    【解决方案1】:

    不,这并不意味着。

    在您的 php 脚本结束其工作后,谁将使用相同的连接并不重要。重要的是您将拥有由此执行的最后插入的 id,而不是另一个连接。

    因此,您可以随意将它用于持久连接和非持久连接。

    【讨论】:

    • 感谢您的快速回复。这是您的解释还是您能指出我在文档中明确说明的地方?
    • @Alien Bishop:我怀疑文档中有一些明确的声明。很明显 - lastInsertId() 返回当前连接的最后一个 id。就像 1+1 一样简单。连接从哪里获得以及连接到哪里都无关紧要。
    • 对。那么如果 Alice 和 Bob 共享同一个连接,会发生这种情况呢? Alice 插入,Bob 插入,Bob 调用 lastInsertId(),Alice 调用 lastInsertId()。既然他们有相同的连接,爱丽丝不会得到错误的结果吗?
    • @Alien Bishop:他们不能共享同一个连接。连接(无论是否持久)一次只能由一个脚本使用。持久性意味着在您的脚本结束工作后 - 连接转到一个特殊的池,当另一个脚本需要新连接时 - 它被赋予该脚本。
    • 啊,好的。连接的持久性并不意味着两个人同时使用它。它仅仅意味着连接被缓存和重用(一次一个用户)。知道了。谢谢!
    猜你喜欢
    • 2011-02-10
    • 2012-07-09
    • 1970-01-01
    • 2012-06-07
    • 2012-07-29
    • 2014-06-19
    • 2021-12-27
    • 2020-01-01
    相关资源
    最近更新 更多