Blog
doctrine - mssql php -dblib
Wenn man mit PHP auf einen MSSQL Server zugreifen will, kann das unter Umständen gar nicht so einfach sein.
Als erstes muss sichergestellt sein, dass man von außerhalb auf den MSSQL Server zugreifen kann.
- In der Windows-Startmenü-Suche "SQL Server-Konfigurations-Manager" eingeben
- SQL Server-Netzwerkkonfiguration--> Protokolle für SQLEXPRESS anklicken
- In der Registerkarte Protokoll die Eigenschaft Aktiviert auf den Wert Ja setzen
- In der Registerkarte IP-Adressen ganz unten die Eigenschaft TCP-Port auf den Wert 1433 setzen
- Anschließend auch das Protokoll Named Pipes aktivieren
- Danach den SQL Server neustarten

Als nächstes muss man den Port 1433 in der Windows Firewall freischalten.
- In der Windows-Startmenü-Suche "Windows-Firewall mit erweiterter Sicherheit" eingeben
- Wähle Eingehende Regeln
- Neue Regel
- Wähle Port und Weiter
- Gib bei bestimmte Lokale Ports 1433 ein und weiter
- Danach kann man auswählen in welchen Netzwerken die Regel gültig ist.
Ob die Verbindung von außen klappt kann man mittels telnet überprüfen. (Unter Linux kann man auch das tool tsql welches mit freetds mitgeliefert wird, machen)
Jetzt muss man unter PHP eine Schnittstelle freischalten die eine Verbindung zwischen Webserver und SQL Server herstellt.
Seit der PHP 5.3 Version gibt es leider keine mssql "Extension" mehr.
Microsoft hat aber einen neuen OpenSource Treiber namens SqlSrv entwickelt. Diesen Treiber unter einem IIS Server zu aktivieren ist auch nicht gerade die einfachste Aufgabe. PHP und Treiber Version müssen übereinstimmen. Was auch zu beachten ist das sich mit dieser neuen Schnittstelle, Funktionen und Verhalten geändert haben können. Das kann zusätzlich Programmierarbeit bedeutete.
Da wir seit neustem mit dem Doctrine Framework arbeiten und dieses auf die PDO Schnittstelle zugreift, ist der mssql und SqlSrc Treiber unbrauchbar. Wir haben deshalb kurzerhand den Entwicklungsserver gewechselt und das ganze unter Linux probiert, was auch einige Tücken hat. Voraussetzung ist, dass beim Webserver die pdo_dblib (PDO Driver for FreeTDS/Sybase DB-lib) aktiviert ist.
Und auch beim Aufbauen der Verbindung beim Doctrine Connection Manager muss man beachten, dass man beim Driver Namen "dblib" angibt und nicht mssql, auch wenn das nirgends auf der Dokumentation vermerkt ist.
$manager = Doctrine_Manager::getInstance();
$dsn = "dblib".':dbname='.'meinemssqldb'.';host='.'192.168.122.157';
/**
* dns data source name
*/
$dbh = new PDO($dsn, 'martin', 'pw');
$conn = Doctrine_Manager::connection($dbh);
Das kann dann z.B. so aussehen. Falls Ihr auch solche tollen Erfahrungen mit PHP und MSSQL habt, gebt Bescheid :). Vor allem wäre es toll zu wissen, wie man unter einem IIS mit dem Doctrine Framework auf einen MSSQL Server zugreifen kann.
Siehe auch: freetds odbc Datas [S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
Schlüsselwörter: php, mssql
zuletzt geändert: 18. Feber 2011 15:38
Link zu diesem Artikel: (in die Zwischenablage)
(c) 2011 | Impressum |
| Empfehlenswerte Blog Einträgebaska.jpg)