2012-04-03 12 views
0

Ich habe eine generische Funktion, die Verbindungen schließt und es dauert ein dbh, das derzeit offene Datenbank-Handle von ref.Schließen eines Datenbank-Handle

ich es so nennen dieses

Closeconnection ($ dbh)

je nach Fall, ob diese dbh ein sqlsrv dbh oder ein mysql dbh war ich eine der beiden Dinge;

sqlsrv_close($dbh);

oder

mysql_close($dbh);

Kurz des Leitens des Verbindungstypen im Funktionsaufruf gibt es einen Weg, um herauszufinden, ob dies eine MySQL oder MSSQL programmatisch verarbeiten, indem Sie einfach die Sondierung $ dbh welche wurde von ref übergeben?

+0

Kurz ist es auf anwendungsweiten Umfang. – Alexander

+0

Warum nicht PDO verwenden? Es gibt sowohl mysql- als auch sqlsrv-Treiber für PDO. Mit PDO für beide DB-Typen erhalten Sie eine einheitliche Schnittstelle zum DBMS und Sie können die Verbindung schließen, indem Sie die Instanz einfach unscharfschalten. – GordonM

Antwort

1

Versuchen Sie mit get_resource_type($dbh);. Es wird mysql link für ein MySQL DB-Handle zurückgegeben. Ich weiß nicht, was es für etwas anderes zurückgeben wird, da MySQL alles ist, was mir zur Verfügung steht.

+0

Dank Crontab gibt es "SQL Server Connection" zurück. –

2

Ein Weg mit einem Anwendungs-weiten könnte eine Schnittstelle definieren.

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

Bereitstellung von Implementierungen für die verwendeten Treiber.

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

Verwenden einer anwendungsweiten Variablen zum Instanziieren des richtigen Treibers.

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

Dies ist wie die üblichste Art, damit umzugehen.

Auch als jemand wird Ihnen empfehlen, sollten Sie verwenden PDO, um dies anzugehen.

+0

danke Alexander, aber der ganze Punkt der Frage war, wie der $ Treiber mysql oder nicht bekommen ... crontab adressiert es. Vielen Dank für Ihre Zeit. Ich bin neu in PHP. Was ist eine gute Ressource, die Sie über die Schnittstelle empfehlen und lernen können, wann und wann Sie sie nicht verwenden sollten? –

+0

Sie wissen bereits, was '$ driver' ist, Sie entscheiden sich einfach dafür, es zu vergessen;). Lesen Sie einfach über OOP, um mehr über Schnittstellen und verwandte Themen zu erfahren. – Alexander

Verwandte Themen