Mehrere MSSQL-Instancen in Squirrel und PHP ansprechen
in PHP, Tipp | Tags: Datenbank, FreeTDS, Instanz, jTDS, Microsoft SQL Server, MSSQL, PHP, Server, SquirrelHat man mehrere Instanzen eines MSSQL-Servers auf einer IP laufen, also zum Beispiel auf einem Server, dann stellt sich für die Verbindung von außerhalb automatisch das Problem, die richtige Instanz anzusprechen. Das Vorgehen unterscheidet sich ein wenig, je nach benutzter Technik, wie in PHP oder SQuirreL.
Angaben Microsoft-typisch
Im Original soll die Datenbank über die typische Syntax \\<Server>\<Freigabe> angesprochen werden, wie man es aus dem CIFS bzw. SMB-Protokoll für Windows-Netzwerke kennt. Hier im konkreten Fall ergibt \\<Server>\<Instanz> die korrekte Syntax. Da Unixe (oder heißt das Unices?) das gerne anders sehen, müssen wir herausfinden, wie die entsprechende Übersetzung lautet.
MSSQL-Instanz und Port in PHP
Über die PHP-Erweiterung mit FreeTDS steht die Funktion mssql_connect() zur Verfügung. Der erste Parameter ist dabei der Server. Die Instanz wird dabei ähnlich der Microsoft-Syntax über einen doppelten(!) Backslash an den Server-Namen bzw. dessen IP angehangen. Zum Beispiel:
1 | $connection = mssql_connect("192.168.0.1\\Instanz01", $user, $password); |
$connection = mssql_connect("192.168.0.1\\Instanz01", $user, $password);
Der doppelte Backslash ist hier nötig, um die Maskierung des nächsten Zeichens innerhalb der Anführungszeichen zu umgehen. Im Hintergrund wird dann nur ein Backslash übergeben.
Muss man einen anderen Port als den Standard-MSSQL–Port 1433 angeben, so macht man das nicht wie üblich per Doppelpunkt, sondern per Komma getrennt, zum Beispiel auf Port 1212:
1 | $connection = mssql_connect("192.168.0.1\\Instanz01,1212", $user, $password); |
$connection = mssql_connect("192.168.0.1\\Instanz01,1212", $user, $password);
Microsoft SQL-Server in SQuirreL ansprechen
SQuirreL, der plattformunabhängige SQL-Client, verwendet pro Treiber eine unterschiedliche Syntax. Über die Auswahl “jTDS Microsoft SQL” gilt es folgende Syntax zu beachten: Der Instanzname ist hier einer Variable namens INSTANCE zuzuordnen, während der Port über Doppelpunkt an den Server-Namen oder seine IP angehangen wird. Das letzte PHP-Beispiel inclusive Instanz und Port zeigt sich hier so:
1 | jdbc:jtds:sqlserver://192.168.0.1:1212/<Datenbank-Name>;INSTANCE=Instanz01 |
jdbc:jtds:sqlserver://192.168.0.1:1212/<Datenbank-Name>;INSTANCE=Instanz01
wobei bereits beim Verbinden der Name der zu wählenden Datenbank angegeben wird. Damit sollte jetzt nichts mehr schiefgehen.
Leave a Reply