如何关闭PDO句柄

Tam*_*lyn 5 php sqlite pdo

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

是否真的无法关闭PDO句柄并释放数据库文件上的锁?

gnu*_*nur 11

我相信unset($var)这样做,我在我的pdo sqlite项目上使用它,它就像我想要它:)


cdh*_*wie 5

将对句柄的所有引用设置为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.
Run Code Online (Sandbox Code Playgroud)

  • 明智的建议,但经验告诉我,你最好"取消设置它们",因为PHP <5.3中的垃圾收集器对于`$ var = NULL`操作有点变幻无常,并且不会破坏资源直到它感觉到喜欢它(尝试使用带有Wireshark的5.2.x上的`fsockopen()`资源进行操作,你会看到在Zend唤醒并发送RST数据包之前需要5-10秒,除非脚本结束).由于某种原因,未设置没有这个问题. (3认同)