【问题标题】:closing a database handle关闭数据库句柄
【发布时间】:2012-04-17 13:49:34
【问题描述】:

我有一个关闭连接的通用函数,它需要一个 dbh,即 ref 当前打开的数据库句柄。

我这样称呼它

关闭连接($dbh)

根据这个 dbh 是 sqlsrv dbh 还是 mysql dbh 的情况,我会做两件事之一;

sqlsrv_close( $dbh);

mysql_close($dbh);

没有在函数调用中传递连接类型,有没有办法通过简单地探测 ref 传递的 $dbh 以编程方式找出这是 mysql 还是 mssql 句柄?

【问题讨论】:

  • Short 将其置于应用程序范围内。
  • 为什么不使用 PDO? PDO 有 mysql 和 sqlsrv 驱动程序,对这两种 DB 类型使用 PDO 将为您提供与 DBMS 的统一接口,您可以通过简单地取消设置实例来关闭连接。

标签: php mysql sql-server


【解决方案1】:

尝试使用get_resource_type($dbh);。它将为 MySQL 数据库句柄返回 mysql link。我不知道它会返回什么,因为我手头只有 MySQL。

【讨论】:

  • 感谢 Crontab,它返回“SQL Server 连接”。
【解决方案2】:

一种使用应用程序范围的方法可能是定义一个接口。

// connection interface
interface db
{
  public function close($conn);
}

为使用的驱动程序提供实现。

// mysql
class mysql implements db
{
  public function close($conn) { 
    mysql_close($conn);
  }
}
// mssql
class mssql implements db {
  public function close($conn) {
    sqlsrv_close($conn);
  }
}

使用应用程序范围的变量来实例化正确的驱动程序。

if($driver == "mysql") {
  $db = new mysql();
} elseif($driver == "mssql") {
  $db = new mssql();
}
...
$db::close($conn);

这是最常见的处理方式。

也有人会推荐你,你应该使用 start using PDO 来解决这个问题。

【讨论】:

  • 谢谢 Alexander,但问题的重点是如何让 $driver 成为 mysql 或不... crontab 解决了这个问题。感谢您的时间。我是 PHP 新手。您可以推荐哪些关于界面和学习何时以及何时不使用它的好资源?
  • 您已经知道$driver 是什么,您只是选择忘记它;)。只需阅读 OOP 即可了解接口和相关知识。
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2011-10-27
  • 1970-01-01
相关资源
最近更新 更多