2012-04-03 143 views
0

我有一個關閉連接的通用函數,它需要一個dbh,當前打開的數據庫句柄通過ref。關閉數據庫句柄

我這樣稱呼它

closeconnection($胸徑)

根據該胸徑是否是SQLSRV胸徑或胸徑的MySQL的情況下,我做的兩件事情之一;

sqlsrv_close($dbh);

mysql_close($dbh);

短傳的連接類型的函數調用的,是有辦法找出這是否是一個MySQL或MSSQL通過簡單地探測編程方式處理$ dbh是由ref傳遞的?

+0

簡而言之是將它放在應用程序範圍內。 – Alexander 2012-04-03 20:57:44

+0

爲什麼不使用PDO?有兩個用於PDO的mysql和sqlsrv驅動程序,對於這兩種數據庫類型使用PDO將爲您提供到DBMS的統一接口,您可以通過簡單地取消設置實例來關閉連接。 – GordonM 2012-04-03 21:38:25

回答

1

嘗試使用get_resource_type($dbh);。它將爲MySQL DB句柄返回mysql link。我不知道它會爲其他任何事情返回什麼,因爲MySQL是我所能掌握的。

+0

感謝Crontab,它返回「SQL Server連接」。 – 2012-04-03 23:49:26

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來解決這個問題。

+0

謝謝亞歷山大,但問題的全部重點是如何獲得$驅動程序爲MySQL或不... crontab處理它。感謝您的時間。我是PHP新手。您可以推薦關於何時何地不使用界面和學習的良好資源? – 2012-04-03 22:15:59

+0

你已經知道'$ driver'是什麼了,你只是選擇忘記它;)。簡單閱讀關於OOP的知識,瞭解界面和相關知識。 – Alexander 2012-04-03 22:17:34