2012-04-03 9 views
0

私は接続を閉じる一般的な関数を持っています.dbhは、現在オープンしているデータベースハンドルrefです。データベースハンドルを閉じる

私はこのDBHが、私は2つのいずれかの操作を行い、SQLSRVのDBHやMySQLのDBHであったかどうかの場合に応じて、この

closeconnection($のDBH)

ようにそれを呼び出します。

sqlsrv_close($dbh);

または

mysql_close($dbh);

関数呼び出しで接続タイプを渡すのショート、これは単純にプロービングすることにより、プログラムのMySQLまたはMSSQLハンドルであるかどうかを確認する方法ですがrefによって渡された$ dbh?

+0

Shortはアプリケーション全体のスコープに入れています。 – Alexander

+0

なぜPDOを使用しないのですか? PDO用のmysqlドライバとsqlsrvドライバの両方があります。両方のDBタイプにPDOを使用すると、DBMSへの統一されたインターフェイスが得られ、インスタンスを単に解除するだけで接続を閉じることができます。 – GordonM

答えて

1

get_resource_type($dbh);をお試しください。 MySQL DBハンドルにはmysql linkが返されます。私はそれが何のために戻ってくるのか分かりません.MySQLは私が便利だからです。

+0

ありがとう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); 

これは、これを処理する最も一般的な方法のようです。

誰もがお勧めするように、これに取り組むにはPDOを使用して開始する必要があります。

+0

アレクサンダーありがとうございましたが、質問の全体的なポイントは、$ドライバがmysqlかどうかを取得する方法でした... crontabはそれに対処しました。あなたの時間をありがとう。私はPHPが初めてです。インターフェイスについてお勧めし、いつ使用しないかを学ぶ良いリソースは何ですか? –

+0

あなたは '$ driver'が何であるかを既に知っています、あなたは単にそれを忘れることを選択しています;)。インタフェースと関連性について学ぶためにOOPについて読むだけです。 – Alexander