【问题标题】:How to close a PDO handle如何关闭 PDO 句柄
【发布时间】:2011-10-27 10:25:06
【问题描述】:

我正在使用 PDO 在 PHP 中访问两个 SQLite 3 数据库。我想在查询期间通过重命名它们来切换数据库文件,但是当文件打开时我不能这样做,因为它会给出一个错误,即该文件正在被另一个进程使用。我尝试关闭持久连接并将句柄设置为空,但都不起作用。

真的没有办法关闭一个 PDO 句柄并释放对数据库文件的锁定吗?

【问题讨论】:

    标签: php sqlite pdo


    【解决方案1】:

    我相信unset($var) 会这样做,我在我的 pdo sqlite 项目中使用它,它的工作方式就像我想要的那样:)

    【讨论】:

    • 谢谢。实际上,您不仅要取消设置/取消 db 句柄,还必须取消设置/取消任何语句句柄。
    • @Tamlyn:确实,因为这些对象引用了数据库句柄。 :)
    • @Tamlyn,真实的故事,发现了一个艰难的方式:)
    • 哦,还有一个问题:您必须在 所有范围 中使指针无效!
    【解决方案2】:

    将所有对句柄的引用设置为null(或除 PDO 对象之外的任何对象,真的),运行时将破坏该对象,从而关闭连接。

    $db = new PDO('...');
    // Do some stuff
    
    $db = null;
    // Assuming this was the last reference to that PDO
    // object, the runtime will destroy the object and
    // its connection.
    

    【讨论】:

    • 明智的建议,但经验告诉我,你最好改用unset() 他们,因为 PHP$var = NULL 操作方面有点善变,不会破坏资源直到感觉像这样(尝试在 5.2.x 上使用 fsockopen() 资源并打开 Wireshark 进行此操作,您会看到 Zend 唤醒并发送 RST 数据包需要 5-10 秒,除非脚本结束)。出于某种原因,未设置没有这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    相关资源
    最近更新 更多