0

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

我这样称呼它

关闭连接($dbh)

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

sqlsrv_close( $dbh);

或者

mysql_close($dbh);

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

4

2 回答 2

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来解决这个问题。

于 2012-04-03T21:07:14.477 回答
1

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

于 2012-04-03T21:04:50.370 回答