关闭数据库句柄

时间:2012-04-03 20:53:02

标签: php mysql sql-server

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

我称之为

closeconnection($ DBH)

取决于这个dbh是sqlsrv dbh还是mysql dbh的情况,我做了两件事之一;

sqlsrv_close( $dbh);

mysql_close($dbh);

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

2 个答案:

答案 0 :(得分: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);

这就像处理它的最常用方法。

同样,任何人都会推荐你,你应该使用PDO来开始解决这个问题。

答案 1 :(得分:1)

尝试使用get_resource_type($dbh);。对于MySQL DB句柄,它将返回mysql link。我不知道它会为其他任何东西返回什么,因为MySQL是我所有的便利。