【问题标题】:Firebird Interbase Connection - unset() and ibase_close()Firebird Interbase Connection - unset() 和 ibase_close()
【发布时间】:2021-05-14 01:19:37
【问题描述】:

我有一个愚蠢的问题。 unset() 和 ibase_close() 在使用 ibase_connect() 结束与 Firebird 数据库的连接方面有区别吗? 我知道有些人使用 unset() 到 PDO 连接等。

喜欢:

$connection = ibase_connect(SOME PARAMETERS HERE);

然后:

unset($connection);

ibase_close($connection);

如果它们的行为相同,也许一个函数比另一个更快?

【问题讨论】:

  • 按照常识,销毁对象和释放内存(后者)与丢失引用和泄漏内存(前者)之间的区别。然而,PHP 或 PDO 中可能有一些自动魔术技巧,例如 ARC,谁知道呢?其实不要问自己亲眼所见!希望您拥有 Firebird 2.5 或更新版本,即具有 TraceAPI 的版本。使用像 FBprofiler.sf.net 或 IBExpert Personal 这样的程序,设置跟踪过滤器以包含连接/断开连接事件,开始记录 - 并查看 unset 是否会导致 FB 服务器上的断开连接事件。
  • 我猜预期用途就像$conn2 = $connection; unset($connection); ....do something else in other subroutines.... ibase_close($conn2); unset($conn2)

标签: php database-connection firebird unset interbase


【解决方案1】:

ibase_close 关闭与 $connection 关联的服务器的非持久连接。链接上的默认事务已提交,其他事务回滚。

unset 清除指向实例的指针。

【讨论】:

    【解决方案2】:

    我对 PHP 的了解充其量只是初级,但据我所知,两者之间存在明显差异。

    函数ibase_close($connection)会向数据库服务器发送消息,所以服务器释放其连接资源然后关闭连接,而unset($connection)只会删除变量$connection

    我对 PHP 和 firebird-php/interbase 驱动程序的了解不足以确定使用 unset 是否会触发清理或关闭连接,但快速扫描 firebird-php 源代码不会显示任何此类机制。我的建议是你应该明确并在调用unset之前使用ibase_close,这样你就可以确定资源(包括服务器端资源)被正确释放了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      • 2018-02-13
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-05-13
      相关资源
      最近更新 更多